Перезапустите новый многопроцессорный подпроцесс - PullRequest
0 голосов
/ 08 марта 2020

Я использую многопроцессорный модуль для запуска задач. Если один из процессов остановлен из-за какого-то исключения, могу ли я запустить новый, чтобы заменить его, а затем убедиться, что общее количество процессов не изменилось.

Если я использую приведенный ниже код, один процесс остановится из-за ошибки преобразования int <> float, тогда фактически будет запущен только один процесс. Большое спасибо.

import multiprocessing
from queue import Empty
import time
import os

def multi_processing():
    print("main_process:", os.getpid())

    items = ["1", "0.1", "2", "5", "6"]

    tasks_queue = multiprocessing.Manager().Queue()
    for item in items:
        tasks_queue.put(item)

    number_of_procs = 2
    process_list = list()

    for _ in range(number_of_procs):
        process = multiprocessing.Process(
            target=tasks_from_queue, args=(tasks_queue,)
        )
        process_list.append(process)
        process.start() 

    for process in process_list:
        process.join()

    print("Finished task")


def tasks_from_queue(tasks_queue,):
    """
    Get tasks to process form queue
    """
    while not tasks_queue.empty():
        try:
            item = tasks_queue.get(block=True, timeout=2)
        except Empty:
            print("Tasks queue empty")
            break

        time.sleep(5)
        print("sub_process", os.getpid(), "get_item", int(item))


if __name__ == "__main__":
    multi_processing()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...