Toto je shrnutí mého tutoriálu z PyConu 2020. Původní video a zdrojový kód najdete zde: https://github.com/santiagobasulto/pycon-concurrency-tutorial-2020
Jedná se o stručný návod/tutoriál, jak efektivně psát souběžné programy pomocí jazyka Python. Souběžnost v jazyce Python může být matoucí. Existuje více modulů (threading
, _thread
, multiprocessing
, subprocess
). Existuje také tolik nenáviděný GIL, ale pouze pro CPython (PyPy a Jython GIL nemají). Kolekce nejsou bezpečné pro vlákna, s výjimkou některých implementačních detailů u CPythonu.
Cílem tohoto tutoriálu je poskytnout přízemní doporučení, jak přistupovat k jednotlivým případům použití souběžného (nebo paralelního) kódu.
Všimněte si, že na rozdíl od některých jiných tradičnějších tutoriálů Pythonu „pouze pro multithreading“ začínám shrnutím architektury počítače i pojmů operačních systémů. Pochopení těchto základních pojmů je zásadní pro správné sestavení souběžných programů. Pokud jste již s těmito tématy obeznámeni, přeskočte prosím tyto části.
Tento výukový kurz je rozdělen do následujících částí:
- Konkurence vs. paralelismus
- Architektura počítače
- Úloha operačního systému
- Vlákna v Pythonu
- Synchronizace vláken
- Multiprocesing
- Knihovny vysoké úrovně:
concurrent.futures
aparallel
Konkurence vs. paralelismus
Paralelismus je, když běží několik úloh současně. Je to konečný cíl souběžných programů. Souběžnost je méně než paralelismus, znamená to, že spouštíme několik úloh a žonglujeme s nimi ve stejném časovém úseku. V každém konkrétním okamžiku však děláme pouze jednu najednou.
Použijeme-li je na vaření, jednalo by se o příklady souběžnosti a paralelismu.
Konkurenci má pouze jedna osoba v kuchyni:
- Začněte krájet cibuli
- Začněte zahřívat pánev
- Dokončete krájení cibule
V tomto případě je jasné, že nemůžeme dělat více věcí SOUČASNĚ. Můžeme je všechny začít, ale musíme se odrážet sem a tam, abychom je zvládli.
Paralelizmus má více lidí v kuchyni:
- Osoba 1 krájí cibuli
- Osoba 2 krájí červenou papriku
- Osoba 3 čeká, až se rozpálí pánev
V tomto případě se dělá několik úkolů současně.
Architektura počítače
Všechny moderní počítače lze zjednodušeně označit pomocí von Neumannovy architektury, která má 3 hlavní části: