使用Pool

时间:2019-06-18 19:25:40

标签: python-2.7 python-multiprocessing ubuntu-18.04 python-pool

我正在使用Linux 18.04.2 LTS 64位计算机。

并行化的函数进行绘图,并使用savefig模块将绘图以pdf格式保存。

当前,我正在运行100次迭代。奇怪的是,第0次,第1次,第2次或第3次迭代会生成正确的pdf文件,而所有其他生成的pdf文件的大小均为0字节。

每次迭代都会产生类似的消息:

  

Gdk消息:14:41:40.404:python2.7:致命IO错误11(资源   X服务器:0上暂时不可用)。

任务完成后,进程冻结,我必须重新引导系统。当我注释掉绘图部分时,代码可以完成工作,但是合并绘图部分会导致上述错误消息。

这些是执行多处理的代码行。如果在没有这些行的情况下调用该函数,则会生成一个正确的pdf文件(即,代码按顺序运行)

from multiprocessing import Pool
import time
if __name__ == "__main__":
    # Step 1: Init multiprocessing.Pool()
    pool = Pool()
    results = []
    # Step 2: `pool.apply` the `mcoverpc()`
    print('START')
    start_time = int(round(time.time()))
    data = list(range(100))
    result_objects = [pool.apply_async(function, args=(num,arg1,arg2,arg3)) for num in data]
    # Step 3: Don't forget to close
    result_num = [r.get()[0] for r in result_objects]
    result_pc = [r.get()[1] for r in result_objects]
    result_fit_details = [r.get()[2] for r in result_objects]
    result_redchi = [r.get()[3] for r in result_objects] 
    pool.close()
    pool.terminate()
    print('END', int(round(time.time()))-start_time)

1 个答案:

答案 0 :(得分:0)

我必须通过简单地将changingmatplotlib后端设为非交互式类型来解决此问题。特别是,我使用PDF作为后端。