python多处理中的并行化
我需要用Python对我现有的代码进行并行化,我在一个for循环中进行阻塞。 我用了python多处理中的并行化,python,multiprocessing,Python,Multiprocessing,我需要用Python对我现有的代码进行并行化,我在一个for循环中进行阻塞。 我用了多处理。process但是它冻结了计算机 import multiprocessing def func(pos,r,h,grid): for i in arayb: l= L(r,g, p[i,:],h) #process need to be parallelized (L is function in another file) p = multiprocessi
多处理。process
但是它冻结了计算机
import multiprocessing
def func(pos,r,h,grid):
for i in arayb:
l= L(r,g, p[i,:],h) #process need to be parallelized (L is function in another file)
p = multiprocessing.Process(target=func)
p.start()
p.join()
print('l',l)
if __name__ == '__main__':
lock = Lock()
当我使用时,如果
上面的类似于:
import multiprocessing
from source.RUN import* # imported main file
def func(pos,r,h,grid):
for i in arayb:
l= L(r,g, p[i,:],h) #process need to be parallelized (L is function in another file)
if __name__ == '__main__':
lock = Lock()
p = multiprocessing.Process(target=func)
p.start()
p.join()
print('l',l)
然后它将不会转到多进程.Process
因此,请给我一个适当的方法来并行处理数组中i的l=l(r,g,p[i,:],h)
我有13到14个进程需要并行化,比如
l=l(r,g,p[I,:],h)
,请给我一个指导,然后我可以使其他进程并行化。您的第一个示例是冻结计算机,因为您在新进程中递归调用func
。这将很快耗尽你所有的CPU/内存。您的第二个示例只是创建一个进程,该进程迭代arayb
并调用L
,而没有任何并发性,因此您不会得到任何性能提升
您要做的是跨多个进程并发执行L
,但不会产生太多进程,使系统陷入困境。您可以使用:
import multiprocessing
# L must is imported or defined somewhere up here...
if __name__ == '__main__':
p = multiprocessing.Pool() # Creates a pool with as many workers as you have CPU cores
results = []
for i in arayb:
results.append(pool.apply_async(L, (r, g, p[i,:], h)))
p.close()
p.join()
for result in results:
print('l', result.get())
谢谢你的ans,我必须将这个文件(multiprocessing.pool)导入到不同的文件中,这就是为什么我需要函数的原因。。那么,使用函数如何编写此代码呢?@dbr您可以将
if.\u name.\u==“.\u main.\u”
块中的所有内容移动到一个函数中,只要您确保只从同样受if.\u name.\u==“.\u main.\u>保护的代码中调用该函数:
。如果不这样做,将导致Windows上的中断。感谢revert,但是如果我在这段代码中添加函数并运行它,那么它将不会进入if_uname_u==“main”:,因此我可以通过何种方式将函数添加到if_uname_uu==“main”:外部或内部…???@dbr抱歉,我不确定您想做什么。您是否试图将创建池的代码放入函数中,以便可以从其他sript导入它?是的。。我的代码中有一个大的for循环,我需要并行一些单独的进程,但是当我在For循环之间使用池或多处理时,它会中断循环,这就是为什么我决定在新文件中创建新函数,然后在那里提供池,然后在现有代码中导入该文件,并在For循环之间调用该函数。。所以我需要一个函数来调用另一个文件。那么请告诉我该怎么做?或者如果你能提供你的电子邮件。。