我想使用multiprocessing
模块中的远程管理器功能在多台机器之间分配工作。我知道有 3rd 方模块,但我想尽可能地坚持核心。我知道对于台式机(单机),您可以使用multiprocessing.Pool
该类来限制 CPU 的数量,但对远程管理器有几个问题。
我有以下远程管理器代码:
from multiprocessing.managers import BaseManager
import Queue
queue = Queue.Queue()
class QueueManager(BaseManager): pass
QueueManager.register('get_queue', callable=lambda:queue)
m = QueueManager(address=('', 50000), authkey='abracadabra')
s = m.get_server()
s.serve_forever()
这很好用,我什至可以使用以下代码将作业提交到队列中:
QueueManager.register('get_queue')
m = QueueManager(address=('machinename', 50000), authkey='abracadabra')
m.connect()
queue = m.get_queue()
queue.put('hello')
您还可以queue.get()
在队列中获取单个条目。
- 你如何获得队列中的项目?当我尝试遍历队列时,我进入了一个无限循环。
- 在工人方面,您可以将每台机器限制为每台机器 1 个工作吗?
- 既然这个方法好像是pull方法,worker需要检查job是否存在,有没有push方法可以触发multiprocessing server?