繁体   English   中英

使用关于pool.apply_async

[英]Using about 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

因此,不可能对单个pdf对象使用multiprocessing 您可以尝试使用threading获取多线程执行,因为您的程序似乎受IO约束(您花费大量时间写入文件)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM