Ich versuche Asyncio und muss es mit einigen normalen Multi-Threaded Blocking-Code mischen, also muss ich die Ausführung mit run_in_exector entladen.Ist asyncios loop.run_in_executor Thread-sicher?
Die asyncio docs warn that "most functions" aren't threadsafe und call_soon_threadsafe
ist die einzige Thread-sichere Funktion. Es gibt ein paar andere, wie zum Beispiel Future.add_done_callback
, die explizit als threadsicher dokumentiert sind. Es hat dann einen Satz, der später sagt: "Sie können run_in_executor verwenden, um Callbacks in anderen Threads auszuführen", aber nicht die Thread-Sicherheit davon spezifisch kommentieren.
run_in_executor ist nicht threadsicher, aber wenn man sich die Quelle anschaut, sieht es so aus, als wäre sie threadsicher, wenn die richtigen Codepfade genommen werden.
Weiß jemand, ob es ist angeblich Thread sicher sein, aber nur nicht dokumentiert, um so zu sein?
Was meinen Sie in diesem Zusammenhang von "thread-safe" zu machen? Die Dokumentation verwendet diesen Begriff, um anzuzeigen, ob es sicher ist, eine bestimmte Methode von einem Thread außerhalb desjenigen aufzurufen, der die Ereignisschleife 'asyncio' ausführt. Das ist wahrscheinlich nicht das, was du hier fragst, oder? – dano
Das ist genau das, was ich meinte. Ich habe einige multi-threaded Code und versuche, asyncio damit zu verwenden, also brauche ich eine thread-sichere Möglichkeit, Blockierungscode zu planen. –