Qwentor
@Qwentor
Веб-программист

Как решить такую проблему с pyppeteer, asyncio и pyrogram?

Есть событие появления нового сообщения, из него надо вызвать скриншотер на pyppeteer в цикле
Выглядит так:
....
async def screenshot(stock, loop, date_msg):
    await launch(headless=True, defaultViewport=None, args=['--no-sandbox'])
    .....
....

@client.on_message()
def msg_handler(client, message):
    .......
   for row in result:
       loop = asyncio.get_event_loop()
       loop.run_until_complete(screenshot(stock.upper(), loop, date_msg))

    screens.append(InputMediaPhoto(os.path.join(BASEDIR, stock.upper()+".png")))


В таком виде получаю такую ошибку:
RuntimeError: There is no current event loop in thread 'Handler_0'


Т.к. пытаюсь запускать не из главного потока

loop1 = asyncio.new_event_loop()
asyncio.set_event_loop(loop1)
loop = asyncio.get_event_loop()
loop.run_until_complete(screenshot(stock.upper(), loop, date_msg))

Вот в таком получаю следующее:
signal only works in main thread
Это уже от pyppeteer
Но если отключаю сигналы:
await launch(headless=True, defaultViewport=None, args=['--no-sandbox'], handleSIGINT=False, handleSIGTERM=False, handleSIGHUP=False)


То loop.run_until_complete просто не завершается и висит.
Что с этим делать?
  • Вопрос задан
  • 339 просмотров
Решения вопроса 1
Qwentor
@Qwentor Автор вопроса
Веб-программист
Короче решил через multiprocessing - обернул в отдельный процесс и соответственно внутри этого процесса поток является главным и все работает
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
03 мая 2024, в 00:45
1000 руб./за проект
02 мая 2024, в 23:56
2000 руб./за проект
02 мая 2024, в 23:29
1500 руб./в час