Próbuję asyncio i muszę go wymieszać z normalnym wielowątkowym kodem blokującym, więc potrzebuję odciążyć wykonanie przy pomocy run_in_exector.Czy loop.run_in_executor asyncio jest bezpieczny dla wątków?
The asyncio docs warn that "most functions" aren't threadsafe, i że call_soon_threadsafe
jest jedyną funkcją bezpieczną dla wątków. Istnieje kilka innych, takich jak Future.add_done_callback
, które są jawnie udokumentowane jako bezpieczne dla wątków. Następnie ma zdanie, które mówi "możesz użyć run_in_executor do uruchamiania wywołań zwrotnych w innych wątkach", ale nie komentuje w szczególności wątku bezpieczeństwa.
run_in_executor nie jest bezpieczny dla wątków, ale patrząc na źródło, wygląda na to, że jest bezpieczny dla wątków, jeśli zostaną zrobione właściwe ścieżki kodu.
Czy ktoś wie, czy jest to z założeniem, że jest bezpieczny dla wątków, ale czy nie jest tak udokumentowany?
Co masz na myśli przez "wątek bezpieczny" w tym kontekście? Dokument używa tego terminu do wskazania, czy można bezpiecznie wywołać daną metodę z wątku poza tym, który uruchamia pętlę zdarzeń 'asyncio'. Prawdopodobnie nie o to tu pytasz, prawda? – dano
To właśnie miałem na myśli. Mam istniejący kod wielowątkowy i próbuję użyć asyncio z nim, więc potrzebuję wątku bezpiecznego sposobu zaplanowania kodu blokującego. –