2014-03-27 91 views
7

我知道通過使用-P switch或@parallel標籤,我可以在多臺主機上並行運行任務。如何在結構中並行執行多個任務

我想並聯同一主機上執行多長時間運行的任務:

@task 
def task1(): 
    # long running op 

@task 
def task2(): 
    #long running op 

@task 
def task3(): 
    #long running op 

@task 
def backup_all(): 
    execute(task1) 
    execute(task2) 
    execute(task3) 

如何開始TASK1,TASK2和TASK3並行使用布在同一主機上。 我知道我可以用不同的任務運行多個工藝流程,但我正在尋找一種涉及結構的解決方案。

回答

2

您有很多方法可以解決此任務。您可以使用bash/linux級別的作業控件,並在後臺運行bg,然後wait完成任務。 Documentation explaining this風格的控制機制。

如果你仍然真的想使用Fabric/Python來做這件事,你可能需要使用已經在lib中的job_queue,然後編寫你自己的隊列來推送它們,或者read up on multiprocessing,只需要做一些簡單的python分叉。雖然這基本上都是job_queue正在做的。

+0

因爲沒有「正確的」答案,因爲Fabric不支持這個,我會選擇這個答案。這是最接近我想要的解決方案。謝謝。 –

2

fabric每個主機運行一個任務。 -P switch just runs task in parallel on different hosts。在同一主機上沒有並行化。

您可以手動並行化命令,例如使用xargs -PGNU parallel

Invoke (beta)聲稱能夠並行運行任務。它從fabric中提取非ssh部分。如果它安裝在遠程主機上,那麼您可以使用fabric來調用invoke命令,該命令將在同一主機上並行運行任務。

+0

我會調查Invoke,謝謝。 –