Допустим, есть приложение на flask + socketio + eventlet. Внутри обработчика сообщения от socketio я могу писать какой-нибудь синхронный код. Например, сделать print или отправить ответ клиенту. Для конкретики вот примерный мой код:
import eventlet
import eventlet.wsgi
import socketio
from flask import Flask, render_template
sio = socketio.Server()
app = Flask(__name__)
@app.route('/')
def main():
return render_template('main.html')
@sio.on('my-msg')
def handle_login(sid, data):
print('my-msg: ' + str(data))
if __name__ == '__main__':
app = socketio.Middleware(sio, app)
eventlet.wsgi.server(eventlet.listen(('', 8000)), app)
Однако, мне нужно работать с библиотекой, которая поддерживает только асинхронный стиль программирования. Не на базе eventlet или чего-то подобного, а на базе непосредственно yield from и т. п. Каким образом я могу делать к ней обращения внутри обработчика сообщения?
Пока приходит в голову, что нужно запустить в отдельном потоке eventloop от asyncio и запускать coroutine в нём при приходе сообщения. В свою очередь по окончании работы coroutine нужно как-то вызвать sio.emit (но это может быть не безопасно из-за того, что я делаю это из другого потока).