Python многопроцессорные бесконечные циклы

python multithreading parallel-processing multiprocessing

3191 просмотра

2 ответа

Я хочу обработать одновременно функцию три раза, которая содержит бесконечный цикл.

Мой код:

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
Автор: Isabel Cariod Источник Размещён: 08.11.2019 11:15

Ответы (2)


2 плюса

Решение

Согласно комментарию 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защиту только для того, чтобы иначе не убивать процессы.

Автор: ChristopherC Размещён: 20.08.2016 02:23

0 плюса

Я не прошел через точную проблему. Но у меня была проблема, где я использовал
multiprocessing.pool, при этом pool = Pool()я не передавал аргументы, чтобы Poolпонравиться Pool(4). Таким образом, по умолчанию он принимал значение, эквивалентное числу ядер; и у меня была такая же проблема выше.
После того, как я использовал pool = Pool(4), он работал нормально.
Ps: номер 4 можно заменить другими значениями.

Автор: Deepak Kumar Размещён: 01.03.2019 08:35
Вопросы из категории :
32x32