【发布时间】:2020-11-29 21:32:36
【问题描述】:
我在 python 中遇到了多处理问题,请参阅下面的代码:
processArray = []
downtimeObj = []
for x in range(0,len(clientMaster)):
downtimeObj.append(Downtime(clientMaster[x]))
processArray.append(multiprocessing.Process(target=downtimeObj[x].live(),))
for j in range(len(processArray)):
processArray[j].start()
for z in range(len(processArray)):
processArray[z].join()
这里我有一个进程数组“processArray”和一个停机时间类的对象数组。在我的客户端主服务器中,我尝试遍历我拥有的客户端数量并为每个客户端创建一个对象,从而为每个客户端创建一个进程。
当前代码创建单个进程并按时间顺序运行 live() 函数。
我希望所有客户端都有单独的进程,并且 object.live() 函数可以同时运行。
【问题讨论】:
-
你的代码有正确的缩进吗?因为现在你的
processArray里面总是有一个Process项目。 -
join()阻塞代码直到进程结束运行 - 所以在循环中使用它for x是错误的想法 - 在启动一个进程后,它将等待它结束,然后再运行另一个进程。您应该在循环外运行它。我认为你应该在for x循环之外运行.start() -
process需要没有()的函数名称,因此您应该使用没有()的target=downtimeObj[x].live。使用(),你在主线程中运行这个函数,并使用这个函数的结果作为目标——比如result = downtimeObj[x].live()和Process(target=result) -
你应该学会在没有
range(len())的情况下使用for-loop
标签: python python-3.x process multiprocessing python-multiprocessing