Junior — Middle
Je možné vykonávať viacero úloh súčasne v jednom vlákne v Pythone?
sobes.tech AI
Odpoveď od AI
V Pythone je možné v jednom vlákne vykonávať viacero úloh súčasne pomocou asynchrónneho programovania (asyncio) alebo generátorov, ktoré umožňujú prepínanie medzi úlohami bez vytvárania nových vlákien. Avšak, kvôli GIL (Global Interpreter Lock) v štandardnej implementácii CPython je súčasné vykonávanie viacerých vlákien, ktoré vykonávajú Python kód, obmedzené — iba jedno vlákno je aktívne v danom momente.
Príklad s asyncio pre súčasné vykonávanie úloh v jednom vlákne:
import asyncio
async def úloha(meno, oneskorenie):
await asyncio.sleep(oneskorenie)
print(f"Úloha {meno} dokončená")
async def main():
await asyncio.gather(
úloha('A', 1),
úloha('B', 2),
úloha('C', 1.5)
)
asyncio.run(main())
Týmto spôsobom môžu byť viaceré úlohy "paralelne" vykonávané v jednom vlákne, striedavo na základe času čakania, ale nie súčasne v zmysle viacvláknového spracovania.