shi*_*ina 7 python multiprocessing
我们可以使用标准的 multiprocessing.Queue 类在独立的 Python3 脚本之间进行通信,例如
bash% ./aaa.py &
bash% ./bbb.py &
Run Code Online (Sandbox Code Playgroud)
如果没有,是否有另一个库,如标准多处理模块,用于与独立脚本通信。
这是一个自我回答。我的最小示例如下。
aaa.py
from multiprocessing.managers import BaseManager
import queue
queue_a = queue.Queue()
queue_b = queue.Queue()
BaseManager.register('queue_a', callable=lambda: queue_a)
BaseManager.register('queue_b', callable=lambda: queue_b)
m = BaseManager(address=('', 50000), authkey=b'qwerty')
m.start()
shared_queue_a = m.queue_a()
shared_queue_b = m.queue_b()
shared_queue_a.put("How are you?")
msg = shared_queue_b.get()
print("%s: %s" % (__file__, msg))
m.shutdown()
Run Code Online (Sandbox Code Playgroud)
bbb.py
from multiprocessing.managers import BaseManager
BaseManager.register('queue_a')
BaseManager.register('queue_b')
m = BaseManager(address=('localhost', 50000), authkey=b'qwerty')
m.connect()
queue_a = m.queue_a()
queue_b = m.queue_b()
msg = queue_a.get()
print("%s: %s" % (__file__, msg))
queue_b.put("I'm fine.")
Run Code Online (Sandbox Code Playgroud)
运行这些脚本。
./aaa.py &; sleep 1; ./bbb.py
Run Code Online (Sandbox Code Playgroud)
印刷
./bbb.py: How are you?
./aaa.py: I'm fine.
Run Code Online (Sandbox Code Playgroud)
查看文档中有关“侦听器和客户端”multiprocessing的部分;与更高级别的更简单的 API 不同,这些 API 允许您通过地址建立连接并对配对进程进行身份验证,这允许两个 Python 脚本在没有父/子关系的情况下进行协作。