Многопроцессорный пул Python с бесконечным циклом while - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь запустить бесконечный цикл while, который вызовет функцию, выполняющую вызов API. Каждый вызов API может занять от 9 до 12 секунд, и я хочу, чтобы x процессов постоянно работали.

Я пробовал некоторые из существующих примеров пула, но они, кажется, принимают функцию вместе со списком аргументов. Моя функция генерирует все необходимые входные данные.

from multiprocessing import Process
from random import randint
from time import sleep

def loop_a():
    while 1:
        wait = randint(5,9)
        print("now waiting" + str(wait) + " seconds")
        sleep(wait)

if __name__ == '__main__':
    #Initialize two separate while loops that can call/wait for responses independently  
    Process(target=loop_a).start()
    Process(target=loop_a).start()

Этот пример кода, который я нашел из другого вопроса, в основном решает мою проблему, но мне интересно, есть ли элегантный способ определить, сколько процессов нужно запустить одновременно. Я хотел бы иметь возможность вводить число процессов в качестве параметра, а не определять новую строку для каждого процесса. Есть ли хороший способ сделать это?

Кажется, этот фрагмент исправляет проблему, с которой я столкнулся.

if __name__ == '__main__':
    [Process(target=loop_a).start() for x in range(2)]

1 Ответ

0 голосов
/ 29 мая 2019

Вы должны использовать Pool

from multiprocessing import Pool
pool = Pool(processes=2) # define number of processes
results = [pool.apply(loop_a) for x in range(2)]
...