【问题标题】:Plot not showing when using python multiprocessing Pool使用 python 多处理池时绘图不显示
【发布时间】:2020-08-28 20:06:17
【问题描述】:

我正在使用 python 多处理,它工作得很好,除非我需要绘制一些东西。代码的结构类似于

def Code(x,y):
     do_something
     plt.plot(X_values,Y_values)
if __name__ == '__main__': 
    pool = Pool(2)
    pool.starmap(Code, Z)#Z is a tuple containing (0.015,0.02)
    #Code(0.015,0.02)

当我使用注释部分调用 Code 函数时,它工作正常,但是当我使用 Pool 时没有显示绘图,另外我看不到我在 中打印的任何内容em>代码函数。 问题是什么?我该如何解决?

感谢任何评论。谢谢

PS:剧情只是为了验证一些结果,不是很复杂。此外,我相信 pool 工作正常,因为我正在将数据提取到 csv 文件中,并且一切似乎都正常,唯一的问题是当我尝试在 Code 中绘制一些东西时。

【问题讨论】:

  • 您的环境是否设置为使用非 GUI 后端?通常,当您调用plt.plot() 之类的名称时,会弹出一个窗口,该窗口会阻止程序直到关闭,通常是单击左上角的“x”。这将阻止这些后台进程,直到图形关闭,您在此处无法执行此操作。

标签: python python-3.x matplotlib multiprocessing


【解决方案1】:

池中的子进程可能无权访问显示来启动绘图窗口。您可以尝试对其进行调试,但您真的想为每个结果创建一个单独的绘图窗口吗?

通常,当我使用多处理时,我将所有数据分发到池中的子进程,在主进程中收集结果,然后将所有结果组合在一起显示摘要。在这种情况下,我会让Code() 返回计算结果,并在主进程中进行绘图。

另外,考虑切换到ProcessPoolExecutor。它没有Pool 那么多的功能,但它修复了一些错误,可以避免在子进程被杀死时冻结池。

【讨论】:

    猜你喜欢
    • 2021-07-03
    • 2011-08-05
    • 2016-12-07
    • 1970-01-01
    • 2021-07-24
    • 2020-08-14
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多