gpt4 book ai didi

python - 使用多处理保存多个 matplotlib 图形

转载 作者:行者123 更新时间:2023-11-28 17:40:39 25 4
gpt4 key购买 nike

我有一个代码可以从名为 001.txt、002.txt、...、411.​​txt 的多个文件中读取数据。我想从每个文件中读取数据,绘制它们,并保存为 001.jpg、002.jpg、...、411.​​jpg。

我可以通过遍历文件来做到这一点,但我想使用多进程模块来加快速度。
但是,当我使用下面的代码时,计算机挂起 - 我无法点击任何东西,但鼠标移动,声音继续。然后我必须关闭计算机。

我显然误用了 matplotlib 的多进程模块。我使用了与下面的代码非常相似的东西来实际生成数据,并毫无问题地保存到文本文件中。我错过了什么?

    import multiprocessing

def do_plot(number):
fig = figure(number)

a, b = random.sample(range(1,9999),1000), random.sample(range(1,9999),1000)
# generate random data
scatter(a, b)

savefig("%03d" % (number,) + ".jpg")
print "Done ", number
close()



for i in (0, 1, 2, 3):
jobs = []
# for j in chunk:
p = multiprocessing.Process(target = do_plot, args = (i,))
jobs.append(p)
p.start()
p.join()

最佳答案

使用multiprocessing 最重要的是只为主进程运行模块的主要代码。这可以通过测试 if __name__ == '__main__' 来实现,如下所示:

import matplotlib.pyplot as plt
import numpy.random as random
from multiprocessing import Pool


def do_plot(number):
fig = plt.figure(number)

a = random.sample(1000)
b = random.sample(1000)

# generate random data
plt.scatter(a, b)

plt.savefig("%03d.jpg" % (number,))
plt.close()

print("Done ", number)


if __name__ == '__main__':
pool = Pool()
pool.map(do_plot, range(4))

另请注意,我用进程池替换了单独进程的创建(它可以更好地扩展到许多图片,因为它只使用与可用内核一样多的进程)。

关于python - 使用多处理保存多个 matplotlib 图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24866070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com