Многопроцессорность может разветвлять или порождать процессы. Поскольку Windows не поддерживает вилку, его единственный вариант - спавн. При порождении создается новый экземпляр python, который должен быть инициализирован как для загрузки рабочего кода, так и для создания среды для его выполнения. Это включает в себя импорт модулей, в том числе сценарий, который все это запустил.
Чтобы это было успешным, модули должны быть безопасными для импорта. То есть простой импорт не запускает больше кода, чем вы хотите. В вашем случае дополнительный код был достаточно безобидным. Поскольку вы использовали if
, чтобы many_process
не создавал процессы при импорте, все, что произошло, это то, что печать, которая также должна была быть в if
, выдавала неверную информацию.
Но на самом деле if
должен быть выше по коду. Функцию процесса создания вообще не следовало запускать.
main_file.py
from process1 import create_process
import time
def many_process():
global procs
for i in range(1,4):
print(f"creating process to sleep {i}")
p = create_process(i)
procs += [p]
print("all process created")
if __name__=="__main__":
# emulating windows on other platforms for test, remove in real code
import multiprocessing
multiprocessing.set_start_method("spawn")
procs = []
many_process()
for p in procs:
p.join()