d1mpi
@d1mpi
Кто куда, а я в Python

Как улучшить данную реализацию?

Всех приветствую. Есть асинхронная функция которая вызывается при обращении на вебсокет.
Она запускает файл с указанными параметрами и ждем завершения выполнения этого файла.

Есть такая проблема, если два пользователя отправят запрос на вебсокет, то второму юзеру ответа не будет, и в целом обработка не начнется, ибо Popen и ожидание завершения тормозит весь код.
Из чего следует вопрос, как это реализовать, чтобы оба юзера могли сделать запрос и обработка началась "одновременно"?

async def checkAddressParams(websocket, params):
    params = json.loads(params)
    filename = params['filename']
    address = params['address']
   
    with Popen([sys.executable, '-u', 'executer/__main__.py', f'{address} {filename}'],
               stdout=PIPE, universal_newlines=True) as process:
        for line in process.stdout:
            if line.strip() == 'stock':
                await websocket.send('is_stock')
                return

    await websocket.send('done')
    await websocket.close()
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Не использовать Popen. Лучше всего код из executer/__main__.py переписать, как асинхронный модуль, импортировать в скрипт и запускать в цикле событий. Если это невозможно, то использовать какую-нибудь очередь задач, с которой можно асинхронно работать. В крайнем случае использовать run_in_executor, но лучше не надо.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы