Sobes.tech
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.