W wątku mamy coś, co nazywa się "Kontekst wątku", w którym możemy zapisać pewne dane (stan) do uzyskania dostępu w specjalnym wątku. W asyncio, muszę zapisać jakiś stan w bieżącej ścieżce wykonania, aby wszyscy kolejni współprawnicy mieli do niego dostęp. Jakie jest rozwiązanie? Uwaga: Wiem, że każda funkcja coroutine jest tworzona dla ścieżki wykonania w asyncio, ale z jakiegoś powodu nie mogę zapisać stanu we właściwościach funkcji. (Chociaż i ta metoda i tak nie jest zbyt dobra)Python asyncio context
Odpowiedz
Możesz spojrzeć na tasklocals
library. Wprowadza on tasklocals.local
, podobnie jak threading.local
dla wielowątkowości.
Dzięki kumplowi! Sprawdziłem kod źródłowy i znalazłem brakującą magię: Task.current_task() – Kamyar
Czy ten kod jest zgodny z ostatnimi wersjami Pythona, ponieważ ta biblioteka nie była aktualizowana od lat? –
tak, jest zgodny –
Istnieje również https://github.com/azazel75/metapensiero.asyncio.tasklocal, ale musisz mieć świadomość, że zadania są często tworzone wewnętrznie przez biblioteki, a także przez asyncio przy użyciu ensure_future(a_coroutine)
i nie ma rzeczywistego sposobu śledzenia tych nowych zadań i inicjowania ich lokalnych (być może z tymi z zadania, które oni wykonują są tworzone z). ("hak" może ustawić funkcję loop.set_task_factory()
z czymś, co wykonuje zadanie, mając nadzieję, że cały kod używa loop.create_task()
do tworzenia zadań, co nie zawsze jest prawdą ...)
Kolejną kwestią jest to, że jeśli niektóre z twoich kod jest wykonywany wewnątrz funkcji oddzwaniania Przyszłości Task.current_task()
, która jest używana przez obie biblioteki do wyboru właściwej kopii locale do wyświetlenia, zawsze zwróci None
...
- 1. Python asyncio Timeout siły
- 2. Python asyncio przykład debugowania
- 3. Python asyncio programu nie wypłynie
- 4. Python aiohttp/asyncio - jak przetwarzać zwrócone dane
- 5. Python asyncio: czytnik zwrotnego i współprogram komunikacji
- 6. Używanie Cythona z Asyncio (Python 3.4)
- 7. python asyncio uruchomić raz pętlę zdarzeń?
- 8. Wydajność asyncio
- 9. python asyncio, jak tworzyć i anulować zadania z innego wątku
- 10. Jak przeładować moduły podczas korzystania z python-asyncio?
- 11. Wzajemnie rekurencyjni współprowadzący z asyncio
- 12. Context nie powiodło Wiosna
- 13. CGContextSaveGState invalid context
- 14. Jersey @Context zakres
- 15. Przekazywanie pętli asyncio przez argument lub użycie domyślnej pętli asyncio
- 16. Jak wyśmiać asyncio coroutines?
- 17. lekki serwer WWW Asyncio
- 18. asyncio i coroutines kontra kolejki zadań
- 19. nie ensure_future dostępne w module asyncio
- 20. Instalujesz pakiet "context" w golangu?
- 21. Gdzie @Context obiekty pochodzą z
- 22. PInvoke SysListView Get Context Menu
- 23. Seter Injection lub Ambient Context
- 24. pętla asyncio add_signal_handler() w systemie Windows
- 25. asyncio wersja `os.chmod` w Pythonie
- 26. Asyncio Pętla zdarzeń jest zamknięty
- 27. Lazy iteratory (generatory) z asyncio
- 28. Metoda łańcuchowa z asyncio coroutines
- 29. Korzystanie z Context Manager do sterowania przepływem
- 30. Asyncio persisent kliencka klasa klienta używająca kolejki
[Ten wątek python-pomysłów] (https: //mail.python .org/pipermail/python-ideas/2015-April/033151.html) i [to zgłoszenie błędu asyncio] (https://github.com/python/asyncio/issues/165) wydają się trafne. – dano
'curio' wydaje się, że to ma https://github.com/dabeaz/curio/pull/85 –