1
私は、セレニウムスクリプトを実行するためにPythonマルチプロセッシングライブラリを使用しています。私のコードは以下の通りです:連続ループでPythonマルチプロセッシングプールを使用する方法
#-- start and join multiple threads ---
thread_list = []
total_threads=10 #-- no of parallel threads
for i in range(total_threads):
t = Process(target=get_browser_and_start, args=[url,nlp,pixel])
thread_list.append(t)
print "starting thread..."
t.start()
for t in thread_list:
print "joining existing thread..."
t.join()
私はjoin()
機能を理解できるように、それが完了するために、各プロセスを待ちます。しかし、私は、プロセスがリリースされるとすぐに、新しい機能を実行する別のタスクが割り当てられることを願っています。
これは次のように理解できます。
第1段階では8つのプロセスが開始されました。
no_of_tasks_to_perform = 100
for i in range(no_of_tasks_to_perform):
processes start(8)
if process no 2 finished executing, start new process
maintain 8 process at any point of time till
"i" is <= no_of_tasks_to_perform
それは私のためによく働いた...この設定では8つのプロセッサがある –
@shane @Shaneおかげで、?それは単に 'process.start(8)'だったはずです。私はwebDriverのインスタンスを確立するためにクラスを初期化することができますし、キュー内のパラメータで私のスクレイピング関数を呼び出すカスタムPythonモジュール私はソースがあります。しかし、私はプールに8つのWebDriversをインスタンス化する必要はありません - 私は1つのXウィンドウフレームバッファ(Xvfb)とヘッドレスchromedriverインスタンスが8つの異なるプロセスとして働いて(1000単位で) ? – Ricalsin
この設定では、実際に手動で8つのプロセス(または必要なもの)を手動で起動し、新しいタスクを連続的に取得するために、それぞれ長時間実行するプロセスにします(ブラウザをインスタンス化して処理します)。 'process1 = Process(target = worker、args =(queue、))' ... ... 'process8 ...'です。 'multiprocessing.Pool'を使いたい場合は' map'を使って関数を渡す必要がありますが、実際にはあなたの場合はそれほど便利ではありません。特に複数のパラメータについては、これをチェックしてください。http: //stackoverflow.com/a/5442981/7405394 – Shane