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