Junior — Middle
Czy można wykonywać wiele zadań jednocześnie w jednym wątku w Pythonie?
sobes.tech AI
Odpowiedź od AI
W Pythonie, w jednym wątku, można wykonywać wiele zadań jednocześnie, korzystając z programowania asynchronicznego (asyncio) lub generatorów, które pozwalają na przełączanie się między zadaniami bez tworzenia nowych wątków. Jednak ze względu na GIL (Global Interpreter Lock) w standardowej implementacji CPython, równoczesne wykonywanie wielu wątków wykonujących kod Pythona jest ograniczone — tylko jeden wątek jest wykonywany w danym momencie.
Przykład z asyncio dla równoczesnego wykonywania zadań w jednym wątku:
import asyncio
async def zadanie(nazwa, opóźnienie):
await asyncio.sleep(opóźnienie)
print(f"Zadanie {nazwa} zakończone")
async def main():
await asyncio.gather(
zadanie('A', 1),
zadanie('B', 2),
zadanie('C', 1.5)
)
asyncio.run(main())
W ten sposób, kilka zadań może być wykonywanych "równolegle" w jednym wątku, przełączając się na podstawie czasu oczekiwania, ale nie jednocześnie w sensie wielowątkowości.