Python 3和MacOS上的多处理行为不符合预期

问题描述

我已经在Python 2.7.15上成功使用了以下代码来并行化(随时间推移)某些大气数据的绘制。不幸的是,尝试在Python 3.8中运行相同的代码会导致多处理一次仅对1个可迭代(输入数据时间步长)块起作用,而不是对不同处理器同时对所有块起作用。通过查看保存图片文件夹可以得到: 使用Python 2.*可以看到figure_0.png,figure_10.png,figure_20.png,...同时使用python3。*我可以看到figure_0.png,figure_1.png,figure_2.png,...显然是因为执行时间更长……

更令人困惑的是,在资源使用方面,我可以看到确实确实同时使用了不同的内核,因此看起来所有内核都在同一块上用于同一任务。

这是代码中的相关代码

from multiprocessing import Pool
from functools import partial

def chunks(l,n):
    """Yield successive n-sized chunks from l."""
    for i in range(0,len(l),n):
        yield l[i:i + n]

def main():
    # Read data from input file
    args = dict(...) # arguments to be passed to the plotting functions

    dates = chunks(time,10)  # chunks of timesteps (my iterable)
     
    plot_files_param = partial(plot_files,**args)

    p = Pool(8)
    p.map(plot_files_param,dates)

def plot_files(dates,**args):
    for date in dates:
        #do plot and save picture as PNG  

if __name__ == "__main__":
    main()
        

我可以在MacOS上重现该行为;如果我尝试在Linux机器上运行相同的程序,则可以同时使用Python 2.x和3.x进行正确的并行化,而在MacOS上,只有Python 2.x可以正常工作。

(这是指向完整代码https://github.com/guidocioni/icon_forecasts/blob/master/plotting/plot_winds10m.py的github存储库的链接

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...