0
我想用芹菜來平行不同參數的功能評估。 這就是爲什麼我想實現一個僞代碼,它假定有裝飾的一個名爲evaluate
功能與@app.task
芹菜設置和拆卸任務
# 0. Setup cluster, celery or whatever parallelisation backend
pass
# 1. Prepare each node to simulate, this means sending some files
for node in mycluster:
#send files to node
pass
# 2. Evaluation phase
gen = Generator() # A Generator object creates parameter vectors that need to be evaluated
while not gen.finished():
par_list = gen.generate()
asyncs = []
for p in par_list:
asyncs.append(evaluate.delay(p))
results = [-1 for _ in par_list]
for i, pending in enumerate(asyncs):
if not pending.ready():
pending.wait()
if pending.successful():
results[i] = pending.get()
else:
pass # manage error
# send results to generator so that it generates a new set of parameters later
gen.tell(results)
# 3. Teardown phase
for node in mycluster:
#tell node to delete files
pass
這種方法的問題是,如果我的主要應用程序正在運行,它已經過了設置階段,那麼當新節點連接時,肯定不會通過設置階段。同樣,如果節點斷開連接,則拆卸階段將不會執行。
一對夫婦的解決方案浮現在腦海中:
- 而不是使用一個設置階段,鏈,使兩種功能,每個節點不設置|評估|拆分「2.評估階段」循環的每個迭代。這裏的問題是通過消息隊列發送文件是我想盡可能避免的。
- 配置工作人員進行設置和拆卸任務,以便他們在連接時自動準備好。我嘗試使用bootsteps.StartStopStep,但我不確定這是否正確。
- 安裝分佈式文件系統,這樣就沒有必要前後評估
的具體問題,這是後準備和刪除文件,什麼是這些類型的任務的建議的方法?我相信這不是一個複雜的用例,也許你可以提供一些指導我應該如何處理這個問題。