Этот вопрос недавно задавался и решался несколько раз, но у меня есть довольно конкретный c пример ...
У меня есть многопроцессорная функция, которая вчера работала совершенно нормально в полной изоляции (в интерактивная записная книжка), однако, я решил параметризовать ее, чтобы я мог назвать ее частью более крупного конвейера и ноутбука для абстракции / очистки, и теперь он использует только один поток вместо 6.
import pandas as pd
import multiprocessing as mp
from multiprocessing import get_context
mp.set_start_method('forkserver')
def multiprocess_function(func, iterator, input_data):
result_list = []
def append_result(result):
result_list.append(result)
with get_context('fork').Pool(processes=6) as pool:
for i in iterator:
pool.apply_async(func, args = (i, input_data), callback = append_result)
pool.close()
pool.join()
return result_list
multiprocess_function(count_live, run_weeks, base_df)
Моя предыдущая версия кода выполнялась по-другому, вместо возврата / вызова я использовал следующее в нижней части функции (которая теперь не работает вообще, которую я параметризовал - даже с назначенными аргументами)
if __name__ == '__main__':
multiprocess_function()
Функция выполняется нормально, просто работает только в одном потоке в соответствии с выводом вверху.
Извинения, если это что-то невероятно простое - я не программист, я аналитик :)
edit: все работает абсолютно нормально, если я включаю в бот if__name__ == ' main ': et c Однако, когда я делаю это, мне нужно удалить параметры - может быть, просто что-то делать с областью видимости. Если я выполняю, вызывая функцию, независимо от того, параметризована она или нет, она работает только в одном потоке.