Python: многопроцессорный пул с 2 функциями - PullRequest
0 голосов
/ 17 мая 2018

У меня проблема с multiprocessing.Pool().
Мой скрипт подключается к веб-сокету, чтобы получить кучу данных. Эти данные хранятся в списке. Моя функция formula() выполняет расчеты на основе различных желаемых сценариев и действует, если сценарий возвращает значение True.
Ниже я разместил упрощенный код:

import multiprocessing, time, json

res_array = []

def process_message(msg):
   res_array.insert(0, msg)
   if len(res_array) > specificnumber:
            del res_array[specificnumber:]
            #inserts data in a list

def formula(res_array1):
    # handles list

def initiate():
    ma = SocketManager(client)
    conn_key = ma.start_multiplex_socket(listofsockets, process_message)
    ma.start()
    # starts websocket

if __name__ == '__main__':
    p1 = multiprocessing.Process(name='p1', target=initiate())
    p2 = multiprocessing.Process(name='p2', target=formula(res_array))
    p1.start()
    p2.start()

Как видите, мне нужно позвонить initiate(), чтобы запустить веб-сокет. Мой план состоял в том, чтобы получать данные из веб-сокета, пока формула работает одновременно.

Этот код работает отлично, но медленно. Чтобы ускорить процесс, я хотел попробовать multiprocessing.Pool(), но каждый найденный пример показывает только одну используемую функцию.

Вопрос:
Как я могу назначить 2 функции для одного пула? Пул должен обрабатывать функции initiate() и formula() одновременно с cpu_count() как число процессов.
Это возможно? Спасибо!

1 Ответ

0 голосов
/ 17 мая 2018

Вы можете написать функцию-обертку для initiate и formula:

def intiate_formulate(res_array1):
    initiate()
    formula(res_array1)

И использовать эту функцию

...