from multiprocessing import Pool
a=[1,2,3,4,5,6]
def func1(a):
return a**2
def func2(a):
x= np.zeros(1)
for i in a:
x += i
return x
if __name__ == "__main__":
pool = Pool( os.cpu_count())
results = pool.map(func1, a)
print(results)
然后我需要
func2(结果(这只是我问题的一个简单例子。请不要告诉我先将数组转移到numpy,因为我的func2比这个例子复杂得多。有人知道怎么做吗?我试过这样的东西,但没有用。
from itertools import repeat
from multiprocessing import Pool
import os
import numpy as np
a=[1,2,3,4,5,6]
def func1(a):
return a**2
def func2(a):
x= np.zeros(1)
for i in a:
x += i
return x
def func22():
if __name__ == "__main__":
pool = Pool( os.cpu_count())
results = pool.map(func1, a)
x= func2(results)
return x
print(func22())
非常感谢。
您只是嵌套有点错误。请记住,由于multiprocessing
必须在每个新进程中重新加载模块,因此除了一次性初始化之外,所有内容都必须在if __name__
保护范围内。
这是有效的。
from itertools import repeat
from multiprocessing import Pool
import os
import numpy as np
def func1(a):
return a**2
def func2(a):
x= np.zeros(1)
for i in a:
x += i
return x
def func22():
pool = Pool( os.cpu_count())
results = pool.map(func1, a)
x= func2(results)
return x
if __name__ == "__main__":
a=[1,2,3,4,5,6]
print(func22())