我要使用遠程管理功能multiprocessing
模塊中分配多臺機器中的工作。我知道有第三方模塊,但我想盡可能堅持使用核心。我知道桌面(單機),您可以使用multiprocessing.Pool
類來限制CPU的數量,但是與遠程管理員有幾個問題。Python中,使用遠程管理和多
我對遠程管理器下面的代碼:
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')QueueManager.register('get_queue')
m = QueueManager(address=('localhost', 50000), authkey='abracadabra')
m.connect()
queue = m.get_queue()
queue.put('hello')
你也可以queue.get()
在隊列中獲得單個條目。
- 你如何在隊列中的項目?當我嘗試迭代隊列時,我輸入一個無限循環。
- 在工人身上,你能限制每臺機器每臺機器1臺作業嗎?
- 因爲這種方法似乎是拉法,那裏的工作人員需要檢查,如果一個任務中存在,纔會有一個推方法,其中多服務器可以被觸發?
謝謝你的迭代方法。 –
所以我想我的問題是這樣的,比如說你有一個單獨的遠程管理員,總是運行,並且你有多個工作者。確保只有一臺工人機器完成一項工作的最佳方法是什麼?有沒有辦法將工作手動分配給工作機器?當一個工作機器使用get()函數提取作業時,是否將該作業從隊列中刪除? –
@ josh1234一旦通過'get'獲得工作,其他進程就不會再收到它了。這正是隊列的目的:它會自動處理進程之間的同步,以避免相同的工作由多個工作人員執行。 – Bakuriu