как делегировать многопроцессорность внутренним функциям веб-сокета (on_message)? - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь найти способ делегировать вычислительную мощность моего компьютера между двумя внутренними функциями моей функции websocket def on_message(). Кроме того, мой код, похоже, пропускает def on_message(), я не слишком уверен, нужно ли мне объявлять эти внутренние функции в аргументах или нет?

Заранее спасибо.

import websocket
import concurrent.futures as mp

Stock_stream = 'wss://data.alpaca.markets/stream'


def on_open(ws):
    print("opened")


def on_message(ws, message):
    def job():

        print("do job")
        with mp.ProcessPoolExecutor(max_workers=3) as pool:
            results = pool.map(job)
            return results

    def trade():

        print("trade")
        with mp.ProcessPoolExecutor(max_workers=1) as pool:
            results = pool.map(trade)
            return results


def on_close(ws):
    print("bye")


ws = websocket.WebSocketApp(Stock_stream, on_open=on_open, on_message=on_message, on_close=on_close)
ws.run_forever()

Спасибо ты

1 Ответ

0 голосов
/ 09 июля 2020

Насколько я знаю, websocket-client - это синхронная библиотека. Поэтому, когда вам нужно проделать долгую обработку перед ответом, используйте многопоточность. В вашем случае запустите поток job() или trade() и передайте им ws.

...
def on_message(ws, message):

    def job(ws):
        print("do job")
        with mp.ProcessPoolExecutor(max_workers=3) as pool:
            results = pool.map(job)
            # send result to ws

    threading.Thread(target=job, args=(ws,), daemon=True).start()
...
...