Python3多处理进程如何传递变量?

2024-10-03 17:28:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 方法nonedatetimedefstartnowprintexecution
1条回答
网友
1楼 · 发布于 2024-10-03 17:28:54

进程不共享相同的内存。Python多重处理序列化(pickle)参数以将它们传递给多个进程。这意味着每个进程都会获得原始列表的副本。你知道吗

要实现所需功能,只需使用多重处理中的特殊共享列表对象:

manager = multiprocessing.Manager()
primes = manager.list(range(10))

相关问题 更多 >