gpt4 book ai didi

Python:带参数的多处理函数

转载 作者:行者123 更新时间:2023-11-30 21:53:36 25 4
gpt4 key购买 nike

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

我已经尝试过接受的答案:

Python: How can I run python functions in parallel?

from multiprocessing import Process

def func1():
print('func1: starting')
for i in range(10000000): pass
print('func1: finishing')

def func2():
print('func2: starting')
for i in range(10000000): pass
print('func2: finishing')

def runInParallel(*fns):
proc = []
for fn in fns:
p = Process(target=fn)
p.start()
proc.append(p)
for p in proc:
p.join()

if __name__ == '__main__':
runInParallel(func1, func2)

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

$ 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 应用于其返回值,而不是到功能。

相反,函数的参数应该通过 argskwargs 参数传递给 Process(target=fcn, ...),例如通过修改 runInParallel 来接受 (function, function args, function kwargs) 的元组,如下所示:

def runInParallel(*fns_params):
proc = []
for fn, fn_args, fn_kwargs in fns_params:
p = Process(target=fn, args=fn_args, kwargs=fn_kwargs)
p.start()
proc.append(p)
for p in proc:
p.join()

if __name__ == '__main__':
runInParallel(
(func1, ('positional', 'argument', 'values'), {'name': 'value', 'argument': 'pairs'}),
(func2, func2_args, func2_kwargs)
)

关于Python:带参数的多处理函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59598627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com