私はPython 3でマルチプロセッシングを試していますが、私はいくつかの奇妙な動作に遭遇しました(少なくとも、私にとっては奇妙です)。タプルを使用したPythonマルチプロセッシングが動作しません
本質的には、10個の乱数のリストを作成します。私は範囲をループします(私の例では2です)。各反復で、私はpool.apply_async
を使って乱数を並列に処理します。 「処理」の結果はリストに格納され、すべての処理が完了したら結果を印刷することができます。私は2 * 10の結果を期待しています。私はからtups=[]
、tups.append("GO", datasetlink)
とreturn tups
を削除すると
import multiprocessing
import time
import random
class Calculator:
def calculate(self, links):
print("LENGHT:", len(links)) # 48
tups=[]
for datasetlink in links:
print(datasetlink)
tups.append("GO", datasetlink)
return tups
dslinks = random.sample(range(1, 101), 10)
result_list = []
def Process(datasetlinks):
calc = Calculator();
tups = calc.calculate(datasetlinks)
return tups;
def log_result(result):
result_list.append(result)
def apply_async_with_callback():
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
for i in range(2):
pool.apply_async(Process, args = (dslinks,), callback = log_result)
pool.close()
pool.join()
DoPrintResults()
def DoPrintResults():
for result in result_list:
print(result)
if __name__ == '__main__':
start = time.time()
apply_async_with_callback()
end = time.time()
print("Execution took: ", (end-start), " seconds")
:私は見つける何
は、しかし、何らかの理由で、私はちょうど2の結果(私の最初のループでは、すなわち2回の繰り返し)を参照してくださいということですCalculator.calculate
機能はすべて正常に動作し、for-loop
がCalculator.calculate
で20回ヒットしたことがわかります。
私は間違っていますか?
tups.append(datasetlink)
マルチコードをデバッグすることは難しいことができます:にあること
tups.append("GO", datasetlink)
変更:
はどこにtupsを作るんですタプル。現在のところalistであるようです –
'tups.append(" GO "、datasetlink)'で 'TypeError'を取得していませんか? 'append'は引数を1つだけとります。 – Will
@ Professor_Joykill OMG。ありがとうございました。 wilusdamanが尋ねたように私に何の誤りも与えていないので、私はそれを完全に見落としました。 – pookie