Я пытаюсь распараллелить очень простую функцию с мультиобработкой
from multiprocessing import Pool
import time
import multiprocessing as mp
import numpy as np
def main():
num_cpus = mp.cpu_count() - 1
pool = mp.Pool(processes=num_cpus)
data = list(range(0,20))
index_chunks = np.array_split(data, num_cpus)
print(index_chunks)
def f(x):
return sum(x)
data_list = [list(index_element) for index_element in index_chunks]
async_mapper = pool.map_async(f, data_list)
async_mapper.wait()
pool.close()
result_list = async_mapper.get()
print(result_list)
if __name__ == '__main__':
main()
Я получаю следующую ошибку:
Traceback (most recent call last):
File "C:/Users/user/Documents/Projects/folder/multiprocessing_test/test.py", line 24, in <module>
main()
File "C:/Users/user/Documents/Projects/folder/multiprocessing_test/test.py", line 20, in main
result_list = async_mapper.get()
File "C:\Users\user\AppData\Local\Continuum\anaconda3\lib\multiprocessing\pool.py", line 644, in get
raise self._value
File "C:\Users\user\AppData\Local\Continuum\anaconda3\lib\multiprocessing\pool.py", line 424, in _handle_tasks
put(task)
File "C:\Users\user\AppData\Local\Continuum\anaconda3\lib\multiprocessing\connection.py", line 206, in send
self._send_bytes(_ForkingPickler.dumps(obj))
File "C:\Users\user\AppData\Local\Continuum\anaconda3\lib\multiprocessing\reduction.py", line 51, in dumps
cls(buf, protocol).dump(obj)
AttributeError: Can't pickle local object 'main.<locals>.f'
Кто-нибудь может объяснить, как решить эту проблему?Я получаю эту ошибку как в Windows, так и в Linux, большое спасибо!