This commit is contained in:
lovinervy committed 2026-10-07 13:06:47 +05:00
commit c394677d07
59 files changed
+5149

No files matched your search

@@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
"""Демо: spawn — каждый процесс заново импортирует модуль.
Запуск из корня курса:
python lab04_multiprocessing/examples/01_spawn_demo.py
Показывает, что на Windows/spawn дочерний процесс заново выполняет
модуль верхнего уровня. Поэтому защита __main__ обязательна.
Здесь же видно время старта процесса.
"""
import multiprocessing
import os
import sys
import time
print(f"[импорт модуля] pid={os.getpid()}, parent={os.getppid()}, "
f"метод={multiprocessing.get_start_method()}")
def worker(x):
return x * x
def main():
print(f"\n[главный процесс] pid={os.getpid()}")
ctx = multiprocessing.get_context() # spawn на Windows и macOS
t0 = time.perf_counter()
with ctx.Pool(2) as pool:
results = pool.map(worker, range(8))
dt = time.perf_counter() - t0
print(f"pool.map -> {results}")
print(f"время (включая старт 2 процессов): {dt * 1000:.1f} мс")
print("\nОбратите внимание: строка [импорт модуля] могла напечататься")
print("дважды-трижды (для каждого воркера при spawn). На fork — один раз.")
print("Вывод: старт воркеров не бесплатный — это накладные расходы лабы 4.")
if __name__ == "__main__":
main()