私はアイテムのリストは以下のrows
に表示する頻度を数える機能があります、実際には関数内の並列性は?
def count(pair_list):
return float(sum([1 for row in rows if all(item in row.split() for item in pair_list)]))
if __name__ == "__main__":
pairs = [['apple', 'banana'], ['cookie', 'popsicle'], ['candy', 'cookie'], ...]
# grocery transaction data
rows = ['apple cookie banana popsicle wafer', 'almond milk eggs butter bread', 'bread almonds apple', 'cookie candy popsicle pop', ...]
res = [count(pair) for pair in pairs]
をlen(rows)
が10000
あると18000
pairs
の要素なので、count()
でリスト内包のコンピューティング・コストがあります主な機能のものは高価です。どちらか、これはすぐに実行されません
from multiprocessing.dummy import Pool as ThreadPool
import multiprocessing as mp
threadpool = ThreadPool(processes = mp.cpu_count())
res = threadpool.map(count, pairs)
:
は、私はいくつかの並列処理を試してみました。実際には、15分後に、私は仕事が終了するように見えなかったので、仕事をやめました。 2つの質問:1)どのように私は実際には、count()
で行われる検索をスピードアップできますか? 2)
threadpool.map
プロセスのステータスを確認するにはどうすればよいですか(繰り返し処理するペア数は確認できます)
大きな「行」を共有しています。 chunkksize = 100を 'map'に渡してみてください。 – khachik
とあなたの質問については、進歩 - 使用するimap。 – khachik
本当の問題は 'count()'のリストの理解でなければならないと思います。これはボトルネックにはならないでしょう、ここでは 'pairs(p)'を得るために 'pairs 'のすべてのpを繰り返します。 – blacksite