Как я могу динамически создать новый процесс в Python? - PullRequest
0 голосов
/ 27 июня 2018

Это моя основная функция. Если я получу новое предложение, мне нужно проверить платеж. У меня есть функция HandleNewOffer () на этом. Но проблема с этим кодом возникает, если есть 2 (или более) предложения одновременно. Один из покупателей должен будет дождаться закрытия сделки. Так возможно ли сгенерировать новый процесс с помощью функции HandleNewOffer () и убить его, когда это будет сделано для одновременного выполнения нескольких транзакций? Заранее спасибо.

def handler():
    try:
        conn = k.call('GET', '/api/').json() #connect
        response = conn.call('GET', '/api/notifications/').json() 
        notifications = response['data']
        for notification in notifications:
            if notification['contact']:
                HandleNewOffer(notification) # need to dynamically start new process if notification

    except Exception as err:
        error= ('Error')
        Send(error)

1 Ответ

0 голосов
/ 27 июня 2018

Я бы порекомендовал здесь использовать шаблон «Пул рабочих», чтобы ограничить количество одновременных вызовов HandleNewOffer.

Модуль concurrent.futures предлагает готовые реализации вышеупомянутого шаблона.

from concurrent.futures import ProcessPoolExecutor

def handler():
    with ProcessPoolExecutor() as pool:
        try:
            conn = k.call('GET', '/api/').json() #connect
            response = conn.call('GET', '/api/notifications/').json() 

            # collect notifications to process into a list
            notifications = [n for n in response['data'] if n['contact']]

            # send the list of notifications to the concurrent workers
            results = pool.map(HandleNewOffer, notifications)

            # iterate over the list of results from every HandleNewOffer call
            for result in results:
                print(result)
        except Exception as err:
            error= ('Error')
            Send(error)

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

...