问题描述
我已经在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 (将#修改为@)