我有此代码:
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个图像。这是正确的方向吗?如果是这样,我该如何进行?
您有两个选择,Thread
或Process
。第一个允许共享内存,但是它们可以并行执行的操作受到限制,因此您可以使用变量共享结果,例如,但是必须使用锁来避免fdata争用。
另一方面,进程不允许共享内存,因此在操作系统级别上获得了完全的并发性。您将必须使用某种外部通信(例如套接字)将输出发送回主进程,或将其结果写入文件。
答案取决于您选择这两种机制中的哪一种。
编辑:详细说明多重处理。
这是通过multiprocessing
库完成的。您将基本定义要让其他进程运行的功能,然后在其他进程中运行它。进程是由操作系统而不是Python处理的,因此您的OS调度程序将负责每个进程的执行位置。有一些先进的工具,例如进程池,可以让您始终运行4个进程(如果您使用的是四核),但您无法告诉OS他应该如何处理这些进程。他可能想执行自己的后台进程。