我尝试使用 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())
关于Python - 多处理错误 'cannot start a process twice',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27386006/