Python - 多处理错误 'cannot start a process twice'

标签 python multiprocessing

我尝试使用 Python 中的 multiprocessing 包开发算法,我从互联网上学习了一些教程并尝试使用这个包开发算法。在环顾四周并使用 ProcessQueuePool 尝试我的“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/

相关文章:

c++ - 在 C++ 中运行 MPI 时调用函数

python - OpenCV 适用于线程,但不适用于进程

python - multiprocessing 会是这个操作的一个很好的解决方案吗?

python - 收到错误 : ModuleNotFoundError: No module named 'sklearn.linear_model._logistic' in Heroku

python - 出现错误 :Input contains NaN, 无穷大或值对于 dtype ('float64' 来说太大)

python - 访问列表中的特定字符

Python 将 raw_input 与变量一起使用

Python azure 模块: how to create a new deployment

python - 多处理模块中的 ThreadPool 与 Pool 有什么区别?

python - 如何将生成器用作具有多处理映射函数的可迭代对象