Необходимо выполнить три задачи: flask, datastream_handler() и Dashboard_handler(). Одна из этих задач, datastream_handler(), должна быть асинхронной функцией.
Я использовал многопоточность, чтобы позволить задачам выполняться одновременно (flask и Dashboard_handler() являются потоками, datastream_handler() запускается из основного потока).
Код: Выделить всё
dashboard_handler()Код: Выделить всё
RuntimeError: You cannot use AsyncToSync in the same thread as an async event loop - just await the async function directly.Я пробовал ее переключить так что flask является основным потоком, а datastream_handler() запускается как threading.Thread (с использованием asyncio.run для запуска асинхронной функции из неасинхронной функции). Однако это привело к той же ошибке.
Я искал эту ошибку, и у нескольких человек была такая же ошибка с Django и Requests-html, но их выводы были специфичны для их соответствующей платформы. и не удалось применить к flask.
Вот мой код:
Код: Выделить всё
datastream_handlerКод: Выделить всё
dashboard_handlerЯ не думаю, что содержимое этих функций вызывает ошибки, но поправьте меня, если я ошибаюсь
Код: Выделить всё
app = Flask(__name__)
socket = SocketIO(app)
@app.route("/")
async def index():
return render_template("index.html")
def start_flask():
socket.run(app, host="0.0.0.0", port=5000)
async def main():
q = Queue() #queue for data transfer
threading.Thread(target=dashboard_handler, args=(q,), daemon=True).start()
threading.Thread(target=start_flask, daemon=True).start()
await datastream_handler(q)
if __name__ == "__main__":
asyncio.run(main())
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/721 ... c-event-lo
Мобильная версия