にリストを処理していない私は、並行して、いくつかのURLを処理するために、このスクリプトを持っている:リストが注文されマルチプロセッシングpool.map順
import multiprocessing
import time
list_of_urls = []
for i in range(1,1000):
list_of_urls.append('http://example.com/page=' + str(i))
def process_url(url):
page_processed = url.split('=')[1]
print 'Processing page %s'% page_processed
time.sleep(5)
pool = multiprocessing.Pool(processes=4)
pool.map(process_url, list_of_urls)
を、私はそれを実行すると、スクリプトは、リストからURLを取得しません。
Processing page 1
Processing page 64
Processing page 127
Processing page 190
Processing page 65
Processing page 2
Processing page 128
Processing page 191
代わりに、1,2,3,4ページを最初に処理してから、リストの順序に従います。これを行うオプションはありますか?
タスクを複数のコアに分割しても、順番に実行したいと言っていますか?または、正しい順序で処理されたURLの出力リストが必要なものです。あなたの質問は最初のことを示唆しています。 –
最初のもの。あなたは "最大並列ダウンロード"を設定するダウンロードマネージャでやっているように、それらはまだ順番に実行されます。私は4つのURLを時間通りに処理したい、例:1,2,3,4で始める。3が終了し、1,2,4がまだ実行されている場合は、5番目(http://example.com/page=5) – Hyperion
しかし、ワーカー関数に戻り値がある場合、戻り値の結果リストの順序は、入力パラメーターのリストの順序に対応します。作業者関数が順序付けられていなくても処理されます。 – elcombato