我需要用 Python 3.6 在多进程中做一些事情。即,我必须更新一个添加对象列表的字典。由于这些对象是不可拾取的,我需要使用dill
而不是pickle
和multiprocess
frompathos
而不是multiprocessing
,但这不应该是问题。
将列表添加到字典需要在添加到字典之前重新序列化列表。这会减慢一切,并且与没有多处理所需的时间相同。你能给我一个解决方法吗?
这是我使用 python 3.6 的代码:
init1
工作但速度慢,init2
速度快但坏了。其余仅用于测试目的。
import time
def init1(d: dict):
for i in range(1000):
l = []
for k in range(i):
l.append(k)
d[i] = l
def init2(d: dict):
for i in range(1000):
l = []
d[i] = l
for k in range(i):
l.append(i)
def test1():
import multiprocess as mp
with mp.Manager() as manager:
d = manager.dict()
p = mp.Process(target=init1, args=(d,))
p.start()
p.join()
print(d)
def test2():
import multiprocess as mp
with mp.Manager() as manager:
d = manager.dict()
p = mp.Process(target=init2, args=(d,))
p.start()
p.join()
print(d)
start = time.time()
test1()
end = time.time()
print('test1: ', end - start)
start = time.time()
test2()
end = time.time()
print('test2: ', end - start)