如何在Python中并行化函数调用

问题描述 投票:0回答:1

我有此代码:

fog_coeff = [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]
start = time.time()
for f in fog_coeff:

    foggy_images= am.add_fog(images[0:278],fog_coeff=f)

    for img in foggy_images:
        im = Image.fromarray(img)
        im.save('./result/'+str(counter)+'-'+str(fog_coeff)+'.jpg')
        counter += 1
print("time taken"+ str(time.time()-start))

我想对此进行归纳。我怎样才能做到这一点?我的主要思想是从fog_coeff列表中获取每个值,并将其提供给每个核心。然后每个核心将处理278个图像。这是正确的方向吗?如果是这样,我该如何进行?

python multiprocessing
1个回答
0
投票

您有两个选择,ThreadProcess。第一个允许共享内存,但是它们可以并行执行的操作受到限制,因此您可以使用变量共享结果,例如,但是必须使用锁来避免fdata争用。

另一方面,进程不允许共享内存,因此在操作系统级别上获得了完全的并发性。您将必须使用某种外部通信(例如套接字)将输出发送回主进程,或将其结果写入文件。

答案取决于您选择这两种机制中的哪一种。

编辑:详细说明多重处理。

这是通过multiprocessing库完成的。您将基本定义要让其他进程运行的功能,然后在其他进程中运行它。进程是由操作系统而不是Python处理的,因此您的OS调度程序将负责每个进程的执行位置。有一些先进的工具,例如进程池,可以让您始终运行4个进程(如果您使用的是四核),但您无法告诉OS他应该如何处理这些进程。他可能想执行自己的后台进程。

© www.soinside.com 2019 - 2024. All rights reserved.