Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.
Образование · 12 мая 2026 г.
Когда вы используете fork для создания нового процесса, текущее состояние генератора сл... — 12 мая 2026 г. в 18:48:28.631
Когда вы используете fork для создания нового процесса, текущее состояние генератора случайных чисел (включая seed) копируется в дочерний процесс. Это может привести к тому, что разные процессы будут генерировать одинаковые «случайные» значения. Чтобы избежать этого, необходимо вручную вызывать random.seed() в каждом процессе. Однако, если вы используете модуль multiprocessing, он уже автоматически выполняет это за вас. Пример: import multiprocessing import random import os import sys def test(a): print(random.choice(a), end=' ') a = [1, 2, 3, 4, 5] # Вызов в основном процессе for _ in range(5): test(a) print() # Вызов с multiprocessing.Process for _ in range(5): p = multiprocessing.Process( target=test, args=(a,) ) p.start() p.join() print() # Вызов с использованием os.fork for _ in range(5): pid = os.fork() if pid == 0: test(a) sys.exit() else: os.wait() print() Вывод будет примерно такой: 4 4 4 5 5 1 4 1 3 3 2 2 2 2 2 Причём, начиная с Python 3.7, os.fork также использует механизм at_fork hook, который переинициализирует генератор случайных чисел, как и multiprocessing. Так что в Python 3.7+ вывод кода выше может быть таким: 1 2 2 1 5 4 4 4 5 5 2 4 1 3 1 👉 @BookPython

