Saya menggunakan 'multiprocess.Pool.imap_unordered' sebagai berikut
from multiprocessing import Pool
pool = Pool()
for mapped_result in pool.imap_unordered(mapping_func, args_iter):
do some additional processing on mapped_result
Apakah saya perlu menelepon pool.close
atau pool.join
setelah loop for?
pool.join()
kemudianpool.close()
setelah saya sudah mulai semua benang kolam renang, tapi saya belum mencoba menggunakanpool.imap_unordered()
sebagai iterable.Jawaban:
Tidak, tidak, tapi mungkin ide yang bagus jika Anda tidak akan menggunakan kolam lagi.
Alasan menelepon
pool.close
ataupool.join
dikatakan baik oleh Tim Peters dalam posting SO ini :sumber
pool.close()
pertama danpool.join()
kedua. Ini memungkinkan Anda untuk menambahkan pekerjaan antarapool.close()
danpool.join()
yang tidak perlu menunggu pool selesai dieksekusi.pool.close()
dulu, tapi sebenarnya wajib. Dari dokumen : Seseorang harus meneleponclose()
atauterminate()
sebelum menggunakanjoin()
.Saya memiliki masalah memori yang sama karena penggunaan memori terus berkembang dengan multiprocessing.pool Python ketika saya tidak menggunakan
pool.close()
danpool.join()
saat menggunakanpool.map()
dengan fungsi yang menghitung jarak Levenshtein. Fungsi ini bekerja dengan baik, tetapi sampah tidak dikumpulkan dengan benar pada mesin Win7 64, dan penggunaan memori terus tumbuh di luar kendali setiap kali fungsi dipanggil hingga seluruh sistem operasi mati. Inilah kode yang memperbaiki kebocoran:stringList = [] for possible_string in stringArray: stringList.append((searchString,possible_string)) pool = Pool(5) results = pool.map(myLevenshteinFunction, stringList) pool.close() pool.join()
Setelah menutup dan bergabung dengan kolam, kebocoran memori hilang.
sumber
ERROR: Terminated with signal 15
sebelum saya menambahkan kode pembersihanpool.close();pool.join();
tetapi setelah menambahkan kode pembersihan itu saya tidak mendapatkan pesan konsol. jadi saya curiga setidaknya pada versi saya, python 2.7 dari C7, bahwa kolam itu mungkin entah bagaimana tidak membersihkan dengan tepat.