Python多进程无限循环问题

4

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

我的代码:

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

2
你是否意识到 target=worker(i) 调用了一个包含无限循环的函数?你的代码永远不会到达 p.start() - Aran-Fey
2个回答

4
根据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的保护。

注:_MAX_ITERATIONS为变量名,无需翻译。

0

我没有遇到过这个确切的问题。但是我曾经遇到过一个问题,当我使用 multiprocessing.pool 时,在执行 pool = Pool() 时,我没有像 Pool(4) 那样向 Pool 传递参数。因此,默认情况下它会采用等同于核心数的值;而我遇到了上述问题。
在我使用 pool = Pool(4) 后,它就正常工作了。
附注:数字 4 可以替换为其他值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接