Это также зависит от платформы (Unix, Windows) и метод запуска .
Вы можете получить ожидаемые результаты на платформе Unix, используя метод fork
(это метод по умолчанию, поэтому нет необходимости устанавливать его явно). Основной процесс будет fork дочерним процессом, а дочерний процесс будет запускать только целевую функцию (f
в вашем случае):
$ python test.py
--Beginning of code--
hello Bob sleeping 1 second
hello Tom sleeping 1 second
goodbye Bob
goodbye Tom
--end of code--
Похоже, ваш скрипт использует spawn
метод, скорее всего, на Windows, так как это единственный метод, доступный на этой платформе. В этом методе родительский процесс запускает процесс интерпретатора fre sh python (python -c from multiprocessing.spawn import spawn_main...
), поэтому выполняется весь модуль:
if __name__ == '__main__':
multiprocessing.set_start_method('spawn')
...
Test:
$ python test.py
--Beginning of code--
--Beginning of code--
--end of code--
hello Bob sleeping 1 second
--Beginning of code--
--end of code--
hello Tom sleeping 1 second
goodbye Bob
goodbye Tom
--end of code--