Mi sono imbattuto in zeromq durante la ricerca di una soluzione efficiente per IPC in python; Ho un paio di processi Python che devono fare un po 'di elaborazione intensiva della cpu su dati da un dict in un processo master. Questi processi di lavoro leggono solo dal dict, solo il processo principale può modificare il dict. I dati nel dict cambieranno, ma atomicamente attraverso il processo principale.Condivisione dei dati utilizzando pyzmq zero-copy
Preferirei avere un pezzo di memoria condivisa in cui tutti i processi di lavoro possano leggere il codice, sfortunatamente questo non sembra possibile in python.
utilizzando una cache come Redis o memcache suona come eccessivo (non volete utilizzare il protocollo TCP & decapaggio di condividere solo una cosa che ho già da qualche parte nella memoria nel formato nativo) ..
Così come alternativa mi piacerebbe utilizzare zeromq per inviare i dati rilevanti dal master dett ad abbonati ai lavoratori utilizzando un socket zeromq IPC. Ciò significherebbe che (sfortunatamente) dovrei serializzare la parte rilevante dal master dtt (usando msgpack?) E poi spingerlo usando un messaggio zmq. Ho letto che è possibile farlo usando zero-copy in modo che non finisca per copiare i dati due volte, è qualcosa che accade automaticamente se uso la copia = False sulla mia stringa binaria msgpacked? E questo è il modo di andare per il mio problema o voi ragazzi avete suggerimenti su come affrontarlo in modo ancora più efficiente?
Grazie!
Martijn
Grazie per le informazioni, ci saranno probabilmente entrambi i messaggi> 10kB e <10kB quindi dovrò sicuramente fare un po 'di benchmarking. C'è un consenso su quale sia il modo più efficiente di fare IPC tra i processi python? ? Basta usare il pacchetto multiprocessing e usare una pipe? – Martijnh
Ci sono molti modi diversi di fare IPC, e vari strumenti hanno diversi vantaggi, a seconda del carico di lavoro. Non penso che ci sia molto consenso, ma ZeroMQ è relativamente popolare. – minrk