- Головна
-
- Встановлення Python.
- Налаштування віртуального оточення
- Типи даних
- Математичні оператори
- Встроїні функції
- Бібліотеки Python
- Колекція List
- Кортежі Tuple
- Множини (Set)
- Рядки Str
- Список escape-символів
- Колекція Dictionary
- Множина frozenset
- Класи та об'єкти
- Винятки
- Пакетні менеджери
- Перевантаження операторів
- Робота з файлами та директоріями
- HttpClient
- HTTPServer
- Модуль socket
- Робота з пошту
- Багатопоточність
- Асинхронні методи
- Event Loop
- Обхід GIL
- Черга deque
- Масиви постійного розміру
-
- Webpack. Базове складання проекту
- GULP. SCSS. Налаштування оточення
- SCSS стилі особливості
- Шпаргалка SQL
- MySQL dump
- Git команди
- Розгорнути ssh git репозиторію на сервері
- Консольні команди
- Декілька версій PHP на сервері
- PHPStorm+xDebug+OpenServer
- PHPUnit + OpenServer
- Додати застосунок з Windows Store в автозавантаження
- Зовнішні посилання
Обхід GIL
Global Interpreter Lock (GIL) — це механізм в інтерпретаторі CPython, який забезпечує, що тільки один потік виконує байт-код Python в будь-який момент часу.
Використання багатопроцесорності (multiprocessing)
Модуль multiprocessing дозволяє створювати процеси, які виконуються паралельно і не обмежені GIL, так як кожен процес має свій власний інтерпретатор Python і пам'ять.
import multiprocessing
def worker(num):
print(f'Worker: {num}')
def main():
processes = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
processes.append(p)
p.start()
for p in processes:
p.join()
main()Асинхронне програмування
import asyncio
async def main():
await asyncio.sleep(1)
print('Hello')
asyncio.run(main())Використання бібліотек з власним управлінням потоками
Деякі бібліотеки, такі як NumPy і SciPy, написані на C і використовують власні механізми управління потоками, що дозволяє їм обходити GIL і ефективно використовувати багатоядерні процесори для обчислень.
Виконання обчислень поза інтерпретатором Python
Використання розширень на C/C++ або інших мовах, які можуть виконувати обчислення поза інтерпретатором Python і потім повертати результат. Це дозволяє уникнути блокування GIL на час виконання інтенсивних обчислень.
Приклад використання Cython:
# example.pyx
def compute(int n):
cdef int i, result = 0
for i in range(n):
result += i
return resultКомпіляція і використання:
cythonize -i example.pyx
import example
print(example.compute(1000000))