Czytałem o module asyncio w python 3, a szerzej o coroutines w python, i nie mogę uzyskać tego, co czyni asyncio tak wspaniałym narzędziem. Mam wrażenie, że wszystko, co można zrobić z Coroutines, można zrobić lepiej, używając kolejek zadań opartych na module wieloprocesowym (np. Seler). Czy są przypadki użycia, w których współrzędne są lepsze niż kolejki zadań?asyncio i coroutines kontra kolejki zadań
Odpowiedz
Nie właściwa odpowiedź, ale lista podpowiedzi, które nie mieściły się w komentarzu:
Jesteś wspomnieć moduł
multiprocessing
(i rozważmythreading
zbyt). Załóżmy, że musisz obsłużyć setki gniazd: czy możesz odradzać setki procesów lub wątków?Ponownie, z wątkami i procesami: jak radzić sobie z równoczesnym dostępem do współdzielonych zasobów? Jaki jest narzut mechanizmów takich jak blokowanie?
Szkielety takie jak Seler również zwiększają obciążenie. Czy możesz go użyć np. do obsługi każdego żądania na serwerze internetowym o dużym natężeniu ruchu? Nawiasem mówiąc, w tym scenariuszu, kto jest odpowiedzialny za obsługę gniazd i połączeń (Selery ze swojej natury nie może tego zrobić dla ciebie)?
Pamiętaj, aby przeczytać the rationale behind asyncio. To uzasadnienie (między innymi) wspomina o wywołaniu systemowym:
writev()
- nie jest o wiele bardziej wydajne niż wielokrotnewrite()
s?
Dodając do powyższego odpowiedź:
Jeśli zadanie pod ręką jest I/O związany i działa na udostępnionych danych, współprogram i asyncio są prawdopodobnie droga.
Jeśli z drugiej strony masz zadania związane z procesorem, w których dane nie są współużytkowane, system wieloprocesowy, taki jak Celery, powinien być lepszy.
Jeśli zadanie jest dostępne zarówno dla procesora, jak i operacji wejścia/wyjścia, a udostępnianie danych nie jest wymagane, nadal korzystałbym z Celery. Możesz używać asynchronicznych operacji we/wy z poziomu aplikacji Celery!
Jeśli masz zadanie związane z CPU, ale z potrzebą współużytkowania danych, jedyną dostępną opcją, jaką widzę teraz, jest zapisanie udostępnionych danych w bazie danych. Były ostatnio próby takie jak pyparallel
, ale wciąż są w toku.
- 1. Jak wyśmiać asyncio coroutines?
- 2. Metoda łańcuchowa z asyncio coroutines
- 3. Asyncio persisent kliencka klasa klienta używająca kolejki
- 4. Implementacja kolejki zadań dla Pythona
- 5. Kolejki zadań testowania jednostkowego w AppEngine
- 6. Czy ta aplikacja internetowa wymaga kolejki zadań?
- 7. Różnice między Coroutines i `goto`?
- 8. Python asyncio Timeout siły
- 9. Python kontra Scala (dla zadań Sparka)
- 10. Wzorzec projektowy Alternatywa dla Coroutines
- 11. Porzucanie coroutines
- 12. Jak mogę napisać asyncio coroutines, które opcjonalnie działają jako zwykłe funkcje?
- 13. Wzajemnie rekurencyjni współprowadzący z asyncio
- 14. Czy Google Cloud Endpoints można trafić za pomocą kolejki zadań?
- 15. Google App Engine - kolejki zadań a zadania Cron
- 16. Kod logiczny w PHP/Laravel z systemem kolejki zadań
- 17. Najlepszy sposób użycia tabeli DB jako komunikatu/kolejki zadań
- 18. Jak prawidłowo ustawiać kolejki zadań do uruchomienia w języku C#
- 19. Jak przekierować łańcuch zadań do określonej kolejki w selerach?
- 20. Wydajność asyncio
- 21. Kolejki zadań alternatywnych do worklingu do użytku z szynami 3?
- 22. Awaria kolejki zadań usuwania śmieci, jeśli dylib jest załadowany
- 23. Jakie są zalety coroutines?
- 24. Coroutines do projektowania gier?
- 25. równoległe ForEach i kolejki
- 26. Perl Kolejki i Threading
- 27. Python asyncio: czytnik zwrotnego i współprogram komunikacji
- 28. Łączenie łańcuchów w asyncio (i wzorzec obserwatora)
- 29. Harmonogram zadań i zadań W Hadoop
- 30. Przepływ zadań w Sharepoint kontra Przepływ pracy w systemie Windows