Ждите только первого ответа python микропроцессора не всех - PullRequest
0 голосов
/ 05 марта 2020

Я использую Python Flask framework.

Мне нужно использовать модуль многопроцессорной обработки python. По сути, я хочу запускать каждое задание в отдельном микропроцессоре.

Вот мой код

import multiprocessing

def indexFindSubscriber(self):
    jobs = []

    for idx, val in enumerate(allNetworks):

        print("index is %d and value is %s" % (idx, val['ip']))
        process = multiprocessing.Process(target=self.getEachNode,
                                          args=(val['ip'], self.subscriberId))
        jobs.append(process)

    for j in jobs:
        j.start()

     for j in jobs:
         j.join()

        print "List processing complete."
        return "Real Success"

Это ожидает завершения процессов перед оператором return. Мне это не нужно. Мне нужен первый быстрый ответ, а затем убить оставшиеся процессы. Как я могу это сделать?

Если я удаляю метод .join (), он просто возвращает и запускает процесс в фоновом режиме. Как я могу справиться с этим сценарием в Python Flask? Спасибо

1 Ответ

1 голос
/ 05 марта 2020

Используйте multiprocessing.Pool и отправьте свои задания, используя imap_unordered .

Затем вы можете просто вызвать next() полученного итератора, чтобы получить первый возвращаемый результат, а затем завершить pool.

В качестве альтернативы, если вы все еще хотите создать один процесс для каждого элемента (довольно рискованное предложение, но вы это делаете), тогда используйте очередь для передачи информации из процессов. После запуска дочерних элементов родитель может просто .get() в очереди, чтобы дождаться первого успеха / завершения / ... с последующим завершением / уничтожением дочерних элементов и закрытием очереди.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...