# -*- 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()