【问题标题】:Python Multiprocessing Saving FilesPython 多处理保存文件
【发布时间】:2019-11-15 18:17:55
【问题描述】:

我正在计算整个南极洲的各种参数。该代码花费的时间太长,所以我决定将南极洲分成 8 个独立的位,并为每个独立的位并行运行代码。在每个文件的末尾,我都会得到一个字典“我”,我想保存它。

'函数文件'是这样的:


I = {}
def function()

   ... code to compute variables ...

    PKL_paths_save = 'path'

    file_save = 'file_name' + change_name

    f = open(PKL_paths_save + file_save, "wb")

    pickle.dump(D, f)

    f.close()

多处理文件如下所示:

import pandas as pd
import pickle
import numpy as np
import multiprocessing
from 'function file' import function

file = 'file_name'

PKL_paths = 'path'

D = pd.read_pickle(PKL_paths + file)

S = range(0,361, 45)

if __name__ == '__main__':

     a = multiprocessing.Process(target=function, args=(S[0], S[1], 1))
     b = multiprocessing.Process(target=function, args=(S[1], S[2], 2))
     c = multiprocessing.Process(target=function, args=(S[2], S[3], 3))
     d = multiprocessing.Process(target=function, args=(S[3], S[4], 4))
     e = multiprocessing.Process(target=function, args=(S[4], S[5], 5))
     f = multiprocessing.Process(target=function, args=(S[5], S[6], 6))
     g = multiprocessing.Process(target=function, args=(S[6], S[7], 7))
     h = multiprocessing.Process(target=function, args=(S[7], S[8], 8))


     i = multiprocessing.Process(target=function, args=(S[0], S[1], 1))
     j = multiprocessing.Process(target=function, args=(S[1], S[2], 2))
     k = multiprocessing.Process(target=function, args=(S[2], S[3], 3))
     l = multiprocessing.Process(target=function, args=(S[3], S[4], 4))
     m = multiprocessing.Process(target=function, args=(S[4], S[5], 5))
     n = multiprocessing.Process(target=function, args=(S[5], S[6], 6))
     o = multiprocessing.Process(target=function, args=(S[6], S[7], 7))
     p = multiprocessing.Process(target=function, args=(S[7], S[8], 8))

     a.start()
     b.start()
     c.start()
     d.start()
     e.start()
     f.start()
     g.start()
     h.start()
     i.start()
     j.start()
     k.start()
     l.start()
     m.start()
     n.start()
     o.start()
     p.start()

     a.join()
     b.join()
     c.join()
     d.join()
     e.join()
     f.join()
     g.join()
     h.join()
     i.join()
     j.join()
     k.join()
     l.join()
     m.join()
     n.join()
     o.join()
     p.join()

     print(a)

所以基本上正在发生的事情是,对于南极洲的每一位,都会同时发生 8 个“功能文件”进程。但是当我们到达文件末尾时,我得到一个内存错误,我认为这是因为它试图一次保存 8 个文件。

这个问题有解决办法吗?有没有办法并行运行代码但串行保存结果(一个接一个)?或者有没有办法将南极洲所有8位的字典(I)组合成一个字典并保存在一个文件中?

任何帮助将不胜感激。

请注意,S 列表指的是南极洲的经度,以及它们如何被划分为南极洲的不同部分。 'args' 中的第三个变量是 change_name 变量,因此它们被保存到不同的文件中。

编辑:

Here is a screenshot of the error. isotope and isotope_nf are the functions imported from the function file.

【问题讨论】:

  • 请提供您迄今为止尝试过的解释,以避免已经失败的建议。例如,您确定文件名总是不同/实际创建了 8 个文件吗?你能提供抛出的确切错误吗?当您只让八个部分之一的过程计算时,它是否有效?这意味着您只需将其中的 7 个注释掉,而不是计算所有 8/8。
  • 是的,我现在都试过了,但错误仍然存​​在。我试图创建一个新函数来纯粹保存文件,但这不起作用,因为函数中没有定义字典来保存文件。
  • 由于错误仍然存​​在,这应该很安全地排除了多处理方面。由于它是MemoryError,我怀疑它与输入/输出数据的大小和所述数据的酸洗有关。您应该使用运行时获得的 exact 错误和 Traceback 更新您的问题。
  • 我现在用收到的错误消息更新了我的问题。任何帮助将不胜感激。

标签: python function multiprocessing save output


【解决方案1】:

我现在只使用 joblib 而不是 pickle 就遇到了这个问题。

【讨论】:

    猜你喜欢
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多