- 
          
 - 
                Notifications
    
You must be signed in to change notification settings  - Fork 7
 
Open
Open
Copy link
Labels
good first issueGood for newcomersGood for newcomershardThis can be a hard issueThis can be a hard issue
Milestone
Description
Numpy arrays are serialized as fast as python's pickle by MessagePack format with msgspec.msgpack . However, to unpack it on the javascript side, a suitable deserialization is necessary. MessagePack is also safer than pickle.
The expected server side code is as follows:
class MyThing(Thing)
    
    numpy_event = Event(doc="event with a large numpy array as memory view") 
    
    @action()
    def numpy_gen(self) -> memoryview:
         "action returning a binary payload of numpy array"
         return memoryview(self._large_numpy_array)
       
    def event_pub(self) -> None:
         while True:
             self.numpy_event.push(memoryview(self._large_numpy_array)
             time.sleep(1)
if __name__ == '___main__':
     MyThing(id='my-thing', serializer='msgpack').run_with_http_server()However, a javascript library which can read this memoryview data is not known. The other option compared to a memoryview is numpy's builtin save() method which can dump the binary data onto a io.BytesIO() object. See here
Some speed test results (not sure if its upto date):
| Serializer | Spectrum 1e3 | Spectrum 1e4 Double Entries | Spectrum 1e5 Entries | Spectrum 1e6 Entries | 
|---|---|---|---|---|
| JSONSerializer | 0.05121 | 0.61983 | 6.29486 | 65.279 | 
| PickleSerializer | 0.01586 | 0.01927 | 0.26054 | 8.31536 | 
| MsgpackSerializer | 0.01237 | 0.09472 | 1.13373 | 15.2071 | 
Rough steps:
- research existing serializers in Javascript
 - Implement a C/C++ based numpy to javascript parser
 - Show code examples to be used in node-wot. In node-wot, you can always access the binary buffer and pass it to a custom deserializer. Better may be to register a content-type with their existing content type management.
 
This is a javascript related issue, not python. This can also be released as a separate package or add-on in npm.
Metadata
Metadata
Assignees
Labels
good first issueGood for newcomersGood for newcomershardThis can be a hard issueThis can be a hard issue
Type
Projects
Status
Ready