[英]Python - Multiprocessing Error 'cannot start a process twice'
我尝试使用 Python 中的multiprocessing
包开发算法,我从互联网上学习了一些教程,并尝试使用此包开发算法。 在环顾四周并使用Process
、 Queue
和Pool
尝试我的“hello world”之后,我尝试在此代码上实现 Queue
def main(queue):
d = ...
k = ...
filename, patname, txt, pat = ...
R = queue
processes = []
for j in range(k-1):
processes.append(Process(target=sim, args=(int(j * d), int((j+1) * d), txt, pat, filename, patname, R, )))
# processes.append(Process(target=sim, args=(int(j * d), len(txt), txt, pat, filename, patname, R, )))
for pr in processes:
pr.start()
for pr in processes:
pr.join()
while not R.empty():
print (R.get())
if __name__ == '__main__':
R = Queue()
main(R)
但是,得到如下错误:
AssertionError: Cannot start a process twice
有人可以帮忙解决这个问题吗
完整输出:
sim(e_original.txt, e_modify0%.txt) = 0.000000
sim(e_original.txt, e_modify0%.txt) = 0.000000
1
Traceback (most recent call last):
File "measure.py", line 108, in <module>
main()
File "measure.py", line 98, in main
pr.start()
File "C:\Python27\lib\multiprocessing\process.py", line 120, in start
assert self._popen is None, 'cannot start a process twice'
AssertionError: cannot start a process twice
sim(e_original.txt, e_modify0%.txt) = 0.000000
您得到断言是因为您多次调用单个Process
对象的start
。 您的示例在第二个process.append
存在缩进错误,我假设该行根本不应该存在。 请注意,启动进程的 for 循环位于上层 for 循环内,因此它为您创建的每个进程执行。 例如,在第二次循环时,您创建第二个进程,然后尝试再次启动第一个进程。 只需将起始代码移出上层 for 循环即可。
processes = []
for j in range(k-1):
processes.append(Process(target=sim, args=(int(j * d), int((j+1) * d), txt, pat, filename, patname, R, )))
for pr in processes:
pr.start()
for pr in processes:
pr.join()
while not R.empty():
print (R.get())
(已解决)这是我问题的答案,对于迟到的帖子感到抱歉。
for j in range(k-1):
p = Process(target=prk.sim, args=(int(j * d), int((j+1) * d) + 5 - 1,))
processes.append(p)
p.start()
p = Process(target=prk.sim, args=(int(d * (k-1)), txtlen,))
processes.append(p)
p.start()
如果k = 3
我需要 3 个处理我的应用程序的进程。 对于第一个循环,我运行 Process两次,所以我只是在每次迭代时启动 Process。 所以,我删除了这段代码
for pr in processes:
pr.start()
for pr in processes:
pr.join()
谢谢大家的回复。
示例代码:
from multiprocessing import Process, Queue
cola = Queue()
if __name__ == "__main__":
while True:
msgIn = input("Cual es el mensaje: ")
if "$" in msgIn:
print("si es un dolar")
cola.put_nowait(msgIn)
if "#" in msgIn:
print ("tamaño conla ", cola.qsize())
break
for n in range( cola.qsize()):
proceso = Process(args=(cola,))
proceso.start()
print(cola.get( timeout=2))
proceso.join()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.