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函数,可以从远程主机读取文件并处理其内容。我已经将所有这些函数放在一个python文件中运行。但问题是,每个函数直到前一个函数完成工作后才开始运行,这需要花费不必要的时间。我曾经考虑过并行运行函数,所以谷歌搜索并找到有趣的解决方案,包括多处理

我在以下方面尝试了公认的答案:

它的工作原理是提供以下输出:

$ 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