loop = asyncio.get_event_loop()
loop.create_task(background_task())
async def main():
asyncio.create_task(background_task())
do_somethin_other
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
async def background_task():
while True:
if some_messages_ready_to_send:
send_messages
await asyncio.sleep(60)
asyncio.create_task(background_task())
main_script_code...
Насколько я понимаю, надо повесить с помощью sio.on обработчик для входящих запросов, иначе все прилетающие данные просто проигнорируются.
Мне потребовался socketio для парсинга одного сайта, и я там не использовал wait таким образом, тем более что у меня был синхронный изначально код (который уже делает много другой работы и его переписывать теперь несколько лениво). Я вместо этого делал короткие (по 0.1 с) sio.sleep, пока не получу ответ, если за 100 итераций (эквивалент 10 секунд) ничего не придёт - скрипт вываливался (это случалось в единичных случаях, а при повторном запуске не повторялось, что меня устраивало). sio.wait я делал только после sio.disconnect.
Вот такой класс я тогда набросал и он вполне работал в моей простой задаче: