Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python多处理中的并行化_Python_Multiprocessing - Fatal编程技术网

python多处理中的并行化

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

我需要用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 = 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循环之间调用该函数。。所以我需要一个函数来调用另一个文件。那么请告诉我该怎么做?或者如果你能提供你的电子邮件。。