Если на пальцах:
1. В питоне
всё - оператор. Вот вообще всё, кроме комментариев. Объявление функции - такой же оператор, как и цикл.
2. Как следствие, нет формального понятия "тело программы". Ты должен сам указать, что является телом, завернув его в
if __name__ == '__main__:
3. Чтобы выполнить подпрограмму, дочерний процесс должен выполнить код, который её определит. А единственный способ это сделать - выполнять файл с самого начала.
4. Если ты не указал тело программы - дочерний процесс выполнит всё, в том числе запуск дочернего процесса. Что обычно не требуется.
Так что правильно выглядящая программа с мультипроцессингом должна иметь только такой вид:
def func1():
...
def func2():
...
...
if __name__ == '__main__':
... # тут запуск дочерних процессов
А ещё данные передаются между процессами с помощью модуля pickle, так что твои распаралленные функции могут принимать и возвращать только такие объекты, которые можно упаковать с помощью pickle.