Python:带参数的多处理函数
我有一些python函数,可以从远程主机读取文件并处理其内容。我已经将所有这些函数放在一个python文件中运行。但问题是,每个函数直到前一个函数完成工作后才开始运行,这需要花费不必要的时间。我曾经考虑过并行运行函数,所以谷歌搜索并找到有趣的解决方案,包括多处理 我在以下方面尝试了公认的答案: 它的工作原理是提供以下输出:Python:带参数的多处理函数,python,multiprocessing,python-parallel,Python,Multiprocessing,Python Parallel,我有一些python函数,可以从远程主机读取文件并处理其内容。我已经将所有这些函数放在一个python文件中运行。但问题是,每个函数直到前一个函数完成工作后才开始运行,这需要花费不必要的时间。我曾经考虑过并行运行函数,所以谷歌搜索并找到有趣的解决方案,包括多处理 我在以下方面尝试了公认的答案: 它的工作原理是提供以下输出: $ python multi-process.py func1: starting func2: starting func2: finishing func1: fini
$ python multi-process.py
func1: starting
func2: starting
func2: finishing
func1: finishing
但我需要将参数传递给函数。因此,我将示例代码更改为:
def func1(a):
......
def func2(b):
......
if __name__ == '__main__':
runInParallel(func1(1), func2(2))
但输出变为:
$ python multi-process.py
func1: starting
func1: finishing
func2: starting
func2: finishing
而且这些函数不是以并行方式运行的
我不知道为什么。runInParallel(func1(1),func2(2))
实际调用函数(同步,在当前进程中),并将runInParallel
应用于它们的返回值,而不是函数
相反,函数的参数应该通过args
或kwargs
参数传递给进程(target=fcn,…)
,例如,通过修改runInParallel
来接受(函数、函数args、函数kwargs)的元组,如下:
def并行运行(*fns_参数):
proc=[]
对于fn、fn_参数、fn_参数中的fn_kwargs:
p=过程(目标=fn,参数=fn_参数,kwargs=fn_kwargs)
p、 开始()
过程附加(p)
对于进程中的p:
p、 加入
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
并行运行(
(func1,('positional','argument','values'),{'name':'value','argument':'pairs'}),
(func2,func2_参数,func2_参数)
)
runInParallel(func1(1),func2(2))
实际调用函数(在当前进程中同步),并将runInParallel
应用于它们的返回值,而不是函数
相反,函数的参数应该通过args
或kwargs
参数传递给进程(target=fcn,…)
,例如,通过修改runInParallel
来接受(函数、函数args、函数kwargs)的元组,如下:
def并行运行(*fns_参数):
proc=[]
对于fn、fn_参数、fn_参数中的fn_kwargs:
p=过程(目标=fn,参数=fn_参数,kwargs=fn_kwargs)
p、 开始()
过程附加(p)
对于进程中的p:
p、 加入
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
并行运行(
(func1,('positional','argument','values'),{'name':'value','argument':'pairs'}),
(func2,func2_参数,func2_参数)
)
考虑到应用程序的类型,采用asyncio可能是一个很好的机会。原因是在调用runInParallel()函数之前调用并运行这两个函数。@quamrana您能解释更多吗?您可以通过
p=Process(target=f,args=('bob'))传递参数来调用函数func,然后编写func()。要使用params调用函数,可以编写func(params)。从@yuriIt可以看到答案。考虑到应用程序的类型,这可能是采用asyncio的一个很好的机会。原因是在调用runInParallel()函数之前调用并运行这两个函数。@quamrana您能解释更多吗?您可以使用p=Process(target=f,args=('bob',)传递参数
要调用函数func,请编写func()。要使用params调用函数,可以编写func(params)。看到来自@yuri的答案了吗
$ python multi-process.py
func1: starting
func1: finishing
func2: starting
func2: finishing