Ich möchte zwischen mehreren Clients und einem Server mit einer shared Queue Daten austauschen. Dazu eignet sich aus meiner Sicht eine gesharte Queue am besten. Das Unangenehme: Ein Client läuft muss mit python3 laufen, der andere mit python2.
Um die Clients mit dem Server zu verbinden, verwende ich multiprocessing.managers.BaseManager.connect(). Bei connect() im Client kommt es zu einer Exception:
Code: Alles auswählen
...
ValueError: unsupported pickle protocol: 3
Minimalisierter Sourcecode:
Server:
Code: Alles auswählen
#!/usr/bin/python
from multiprocessing.managers import BaseManager
try:
import queue
except ImportError:
import Queue as queue
class QueueManager(BaseManager):
pass
q = queue.Queue()
QueueManager.register('get_queue', callable=lambda:q)
manager = QueueManager(address=('', 50001), authkey="hallo".encode('latin1'))
server = manager.get_server()
server.serve_forever()
Client:
Code: Alles auswählen
#!/usr/bin/python3
from multiprocessing.managers import BaseManager
class QueueManager(BaseManager):
pass
manager = QueueManager(address=('', 50001), authkey="hallo".encode('latin1'))
manager.connect()