我正在嘗試創建一個調用其他5個python腳本的同時傳遞數組,然後傳遞5個腳本中的每一個的python腳本對該數組執行操作並將不同的數組返回到初始腳本。同時從Python調用腳本,向每個腳本傳遞數據,並將數據返回到原始的
初始腳本然後意識到何時5已經返回值,然後對這5個數組執行操作。
我認爲解決方案是類似於 os.system(./script1.py arg1)
,os.system(./script2.py arg2)
但我不確定如何繼續。
我正在嘗試創建一個調用其他5個python腳本的同時傳遞數組,然後傳遞5個腳本中的每一個的python腳本對該數組執行操作並將不同的數組返回到初始腳本。同時從Python調用腳本,向每個腳本傳遞數據,並將數據返回到原始的
初始腳本然後意識到何時5已經返回值,然後對這5個數組執行操作。
我認爲解決方案是類似於 os.system(./script1.py arg1)
,os.system(./script2.py arg2)
但我不確定如何繼續。
您可以使用線程池並行運行所有命令。我也轉換到抓取程序輸出的subprocess
模塊:
import multiprocessing.pool
import subprocess as subp
def worker(script):
proc = subp.Popen(script, shell=True, stdout=subp.PIPE, stderr=subp.PIPE)
out, err = proc.communicate()
return script, out, err, proc.returncode
scripts = ['./script1.py arg1', './script2.py arg2']
pool = multiprocessing.pool.ThreadPool(len(scripts))
for script, out, err, returncode in pool.map(worker, scripts):
do your magic
pool.close()
pool.join()
這看起來有點像我以後的樣子,但是我不清楚腳本是什麼,出來,..你的魔法是爲了什麼。另外在哪裏返回不同腳本的輸出? –
池在「腳本」中爲每個項目創建一個線程。 'pool.map'將每個腳本和工作者函數發送給線程,然後作爲迭代器將工作返回值傳遞給主程序。所以,for循環會依次獲取每個腳本的結果。根據你想要如何處理數據,你可以處理返回的內容以及它的組裝方式。例如,'worker'可以返回'out',你可以得到一個輸出列表爲'outputs = list(pool.map(worker,scripts))'。 – tdelaney
哇。非常感謝。這工作很好。有沒有辦法可以將每個腳本的輸出與打印內容分開?即在pool.map中是否有返回值以及超值? –
如果您想同時運行這五個腳本,則不應該使用'os.system'。使用'subprocess'模塊。 – kindall