Если вы разместите все в глобальной области видимости внутри этого блока if __name__ == "__main__"
следующим образом, вы должны обнаружить, что ваша программа ведет себя так, как вы ожидаете:
def howmany_within_range_rowonly(row, minimum=4, maximum=8):
count = 0
for n in row:
if minimum <= n <= maximum:
count = count + 1
return count
if __name__ == "__main__":
np.random.RandomState(100)
arr = np.random.randint(0, 10, size=[20, 5])
data = arr.tolist()
pool = mp.Pool(mp.cpu_count())
results = pool.map(howmany_within_range_rowonly, [row for row in data])
pool.close()
print(results[:10])
Без этой защиты, если ваш текущий модуль был импортирован из другой модуль, ваш многопроцессорный код будет выполнен. Это может происходить в неосновном процессе, порожденном в другом пуле, и порождение процессов из подпроцессов не допускается, поэтому мы защищаем от этой проблемы.