我对Python还是很陌生,但尝试学习如何使用多重处理。我有一个计时方法执行时间的方法,但是由于某种原因,列表对象没有被更改。
参见下面的代码,我缺少什么?
def timeMethod(methodToTime, methodVar, methodVar2):
start = datetime.now()
if methodVar2 == None and methodVar == None:
methodToTime()
elif methodVar2 == None:
methodToTime(methodVar)
else:
methodToTime(methodVar, methodVar2)
end = datetime.now()
time_elapsed = end - start
print("Seconds Elapsed = ", time_elapsed)
def indirectList(aList):
appendToList(aList)
def appendToList(aList):
aList.append(1)
if __name__ == "__main__":
import sys
primeList = []
print("primeList before execution: " + str(primeList))
p3 = multiprocessing.Process(target=timeMethod, args=(indirectList, primeList, None))
p3.start()
p3.join()
print("primeList after execution: " + str(primeList))
print("Done!")
控制台输出:
primeList before execution: []
Seconds Elapsed = 0:00:00
primeList after execution: []
Done!
最佳答案
进程不共享相同的内存。 Python多处理序列化(点刺)args,以将其传递给多个过程。这意味着每个进程都将获得原始列表的副本。
要实现您想要的功能,只需使用多重处理中的特殊共享列表对象:
manager = multiprocessing.Manager()
primes = manager.list(range(10))