【问题标题】:Python multiprocessing infinite loopsPython多处理无限循环
【发布时间】:2016-12-27 11:27:33
【问题描述】:

我想同时处理一个包含无限循环的函数三次。

我的代码:

import multiprocessing

def worker(numbers):
    while True:
        print numbers

if __name__ == '__main__':
    nums = ["1","2","3"]
    for i in nums:
        p = multiprocessing.Process(target=worker(i))
        p.start()

问题是只循环到“1”

1
1
1
1
1
1
1

【问题讨论】:

  • 您知道target=worker(i) 调用包含无限循环的函数吗?你的代码永远不会到达p.start()

标签: python multithreading parallel-processing multiprocessing


【解决方案1】:

根据 rawing 的评论,您不是将函数对象传递给 target 关键字参数,而是直接调用它并传递它的返回值,因为它是一个无限循环,所以它永远不会返回。

试试这个:

import multiprocessing

_MAX_ITERATIONS = 10

def worker(numbers):
    iteration = 0
    while True:
        if iteration >= _MAX_ITERATIONS:
            break

        print(numbers)
        iteration += 1

if __name__ == '__main__':
    nums = ["1","2","3"]
    for i in nums:
        p = multiprocessing.Process(target=worker, args=(i,))
        p.start()

我只添加了一个_MAX_ITERATIONS 守卫,以免在其他情况下终止进程。

【讨论】:

    【解决方案2】:

    我还没有解决确切的问题。但是我在使用
    multiprocessing.pool 时遇到了问题,在执行pool = Pool() 时,我没有像Pool(4) 那样将参数传递给Pool。因此,默认情况下,它的值等于核心数;我也遇到了同样的问题。
    在我使用pool = Pool(4) 之后,它工作正常。
    ps:数字4可以换成其他值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多