Python-Asynchronkontext

8

Beim Threading haben wir etwas namens "Thread-Kontext", in dem wir einige Daten (Zustand) für den Zugriff in einem speziellen Thread speichern können. In asyncio muss ich einen Zustand im aktuellen Ausführungspfad speichern, damit alle konsequenten Coroutinen darauf zugreifen können. Was ist die Lösung? Hinweis: Ich weiß, dass jede Coroutine-Funktion für einen Ausführungspfad in asyncio instanziiert wird, aber aus irgendeinem Grund kann ich den Status nicht in Funktionseigenschaften speichern. (Obwohl diese Methode sowieso nicht sehr gut ist)

    
Kamyar 02.06.2015, 12:43
quelle

2 Antworten

7

Sie können sich tasklocals library ansehen. Es führt tasklocals.local like threading.local für Multithreading ein.

    
Andrew Svetlov 04.06.2015, 15:58
quelle
1

Es gibt auch Ссылка , aber Sie müssen sich bewusst sein, dass Aufgaben häufig intern von Bibliotheken und auch von asyncio erstellt werden mit ensure_future(a_coroutine) und es gibt keine Möglichkeit, diese neuen Aufgaben zu verfolgen und ihre lokalen Benutzer zu initialisieren (möglicherweise mit denen der Aufgabe, aus der sie erstellt wurden). (Ein "Hack" sollte eine loop.set_task_factory() -Funktion mit etwas festlegen, das den Job erledigt, in der Hoffnung, dass der gesamte Code loop.create_task() verwendet, um die Aufgaben zu erstellen, was nicht immer wahr ist ...)

Ein weiteres Problem besteht darin, dass, wenn ein Teil Ihres Codes in einer Funktion für den zukünftigen Rückruf Task.current_task() ausgeführt wird, die von beiden Bibliotheken verwendet wird, um die richtige Kopie der zu bedienenden Locals auszuwählen, immer None ...

    
Alberto Berti 25.10.2017 17:19
quelle