テーブルからN個のレコードを取り、そのレコードをマルチスレッドで処理するスクリプトを作成しています。リストをN個のリストに分割し、各リストをマルチスレッドの作業者に割り当てます
以前は、各作業者定義内のSQL文でOrder by RAND()を使用し、重複がないことを期待していました。
作品のこの種の(重複除去は後で実行される)、しかし、私はで私のスクリプトをより効率的にしたいと思います:、一度テーブルを照会
1) Nのレコードを抽出し、それらを割り当てますリスト
2)を介して実現することができますYリストの〜同じサイズのリストの中に大きなリストを分割:
number_of_workers = 2
first_names = ['Steve', 'Jane', 'Sara', 'Mary','Jack']
def chunkify(lst,n):
return [lst[i::n] for i in xrange(n)]
list1 = chunkify(first_names, number_of_workers)
print list1
3)マルチスレッドでワーカー関数を定義するときは、各ワーカーに異なるサブリストを渡します。注 - 作業者(およびクエリ結果を分割したい部分)の数は、関数の最初に定義されます。 しかし、私はかなり新しいPythonですので、各サブリストを別の作業者に渡す方法はわかりません(またはそれは実行可能ですか?)
助け、他の提案などが大歓迎です!
マルチスレッドコードの例を以下に示します。どうすればいいですか
import threading
import random
def worker():
assign sublistN to worker N
print sublistN
threads = []
for i in range(number_of_workers):
print i
print ""
t = threading.Thread(target=worker)
threads.append(t)
t.start()
ありがとうございました!
ありがとうございました。待ち行列を調べます。 スレッディングに関しては、私はスクレイピングスクリプトを作成しています。ボトルネックはプロキシ経由のネットワーク/リクエストであるため、スレッド処理は単一のCPUコアがトップになるまで処理速度を上げるようです。 私はマルチプロセッシングについて素晴らしいことを読んだことがありましたが、動作させることができませんでした。私の推測は、jupyterノートブック経由でコードを実行しているからです。一度良くなると、私は別のショットをマルチプロセッシングし、すべてのコアをうまく利用できるようになります:) – FlyingZebra1