Init
This commit is contained in:
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()
|
||||
Reference in new issue
Block a user