私はシーケンシャルプログラムのために書いた関数を並列化しようとしています。 ["foo bar los angles", "foo bar new york", ...]
マルチスレッドを使ってPythonで変数を(変更用ではなく)共有するには?
入力2、辞書のように文字列のリスト:["los angles", "new york"..]
私は入力1から入力2内のすべての文字列を削除したい以下は、入力および出力
入力1、文字列のリストです。出力は次のようになります:
["foo bar", "foo bar"].
私はダブルforループを使用してそれを行うことができます。
res = []
for s1 in input1:
for s2 in input2:
if s2 in s1:
res.append(s1.replace(s2, ""))
しかし、これはリストINPUT1の200万サイズに少し遅い(私のMacBook Proの10分以上)を実行します(入力2は、数千人のカップルです)。
pythonのmultithreading.dummy.Pool
を使用する方法が見つかりました。グローバル変数とともにpool.map
を使用して並列化します。しかし、私はグローバル変数の使用について懸念しています。それは安全ですか? Pythonマルチスレッドで変数を共有するための良い方法がありますか(apache sparkのmapPartions
のようなものかもしれません)?
私は現在Python 2.7を使用しています。だから私は答えpython2を使用することを好むだろう。
並列化を進める前の中間段階として、リストをセットに切り替えるだけでコードをもっと速くすることができます(問題があれば問題あり) – Tyler
元のリストの順序を保持する必要がありますか? – rrauenza
@タイラー私はuse setがパフォーマンスを向上させるとは思わない。私はまだ全体のセットを横断する必要があるので。私の要件は、その部分文字列がinput2であれば、input1の項目の部分文字列を削除することです。だから私は使用セットがパフォーマンスを向上させるとは思わない。 – xuanyue