我对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))

09-11 09:10