我试图创建一个远程管理器,并使用队列在多个进程之间进行通信。我注意到,当我尝试在管理器上使用start
方法时,会得到AttributeError: Can't pickle local object 'server1.<locals>.<lambda>'
,但是当我获取服务器对象然后使用serve_forever
时,它将起作用。奇怪的是,在两种情况下,我都有相同的lambda要序列化。
问题是:第一种方法我做错了什么?为什么不起作用?
下面我已经创建了代码的简化版本并粘贴了这两种方法。 server1()不起作用,server2()是工作方法。我正在使用 Python 3.7.4
from multiprocessing.managers import BaseManager
from multiprocessing import Queue
class QueueManager(BaseManager):
pass
def server1():
items_queue = Queue()
QueueManager.register('get_items_queue', callable=lambda: items_queue)
m = QueueManager(address=('localhost', 50000), authkey=b'auth')
m.start()
def server2():
items_queue = Queue()
QueueManager.register('get_items_queue', callable=lambda: items_queue)
m = QueueManager(address=('localhost', 50000), authkey=b'auth')
s = m.get_server()
s.serve_forever()
if __name__ == "__main__":
server1()
# server2()
调用server1()时,我得到AttributeError: Can't pickle local object 'server1.<locals>.<lambda>'