私はマルチプロセッシングパッケージが本当に新しいので、タスクを完了できません。Python - 単一の結果ファイルに書き込む際のマルチプロセッシング
私は多くの計算をオブジェクトのリストで行います。
私が書き留める必要がある結果は、それらのオブジェクトにも保存されます。
結果は、プロセスが計算を完了するとすぐに1つのファイルに書き込まれます(私が少なくともそれを得た方法は、すべての計算が完了するまで待つ)。
import multiprocessing
import time
import csv
class simpl():
def __init__(self, name, val):
self.name = name
self.val = val
def pot_val(inpt):
print("Process %s\t ..." % (inpt.name))
old_v = inpt.val
inpt.val *= inpt.val
if old_v != 8:
time.sleep(old_v)
print("Process %s\t ... Done" % (inpt.name))
def mp_worker(inpt):
pot_val(inpt)
return inpt
def mp_handler(data_list):
p = multiprocessing.Pool(4)
with open('results.csv', 'a') as f:
res = p.map_async(mp_worker, data_list)
results = (res.get())
for result in results:
print("Writing result for ",result.name)
writer= csv.writer(f, lineterminator = '\n', delimiter=";")
writer.writerow((result.name, result.val))
if __name__=='__main__':
data = []
counter=0
for i in range(10):
data.append(simpl("name"+str(counter),counter))
counter += 1
for d in data:
print(d.name, d.val)
mp_handler(data)
すべてのプロセスが完了するのを待つことなく、計算結果を1つのファイルに同時に書き込む方法を教えてください。
行うのPython 3.3+でimap_unordered
を使用することができます。何か質問がありますか? –
申し訳ありませんが、私はそれを質問に変更しました:) – Ali
結果の順序は関係しますか? – janbrohl