使用大约pool.apply_async



我是python的新手,我想用pool.apply_async()来校准我的代码。pool.apply_async()的参数让我感到困惑。

这是我的代码:

def detect(i, pdf):
savefig2pdf.save(event['value'][0][5000:6000],
event['value'][1][5000:6000],
event['value'][2][5000:6000],
event['start point index']+5000 ,
eventlist[i],
p_result,
s_arrival,
pdf)"
if __name__ == '__main__':
pdf = PdfPages('cut_figure.pdf')
pool = multiprocessing.Pool(processes=10)    # set the processes max number 10
for i in range(0, len(eventlist)):
pool.apply_async(detect, (i, pdf,))
pool.close()
pool.join()
pdf.close()

如果我只通过i,它有效。如何将 pdf 也传递给进程?我需要pdf能够写,直到所有过程完成。 感谢您的帮助。

multiprocessing模块依赖于pickle来序列化在函数之间传递的对象。但是你不能腌制pdf对象:

>>> from matplotlib.backends.backend_pdf import PdfPages
>>> import pickle
>>> pdf = PdfPages('cut_figure.pdf')
>>> pickle.dumps(pdf)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-e06adaa58666> in <module>()
----> 1 pickle.dumps(pdf)
TypeError: cannot serialize '_io.BufferedWriter' object

因此,无法将multiprocessing与单个pdf对象一起使用。您可以尝试使用threading来获取多线程执行,因为您的程序似乎是 IO 绑定的(您花费大量时间写入文件(。

相关内容

  • 没有找到相关文章

最新更新