最近我一直在使用ProcessPoolExecutor来加速我编写的一些函数的处理。
我有一个关于我想加速的函数的问题。
这个函数
def thefunction(input_file, output_file, somepar)
包括打开和读取输入文件,处理它并将结果写入输出文件。
现在我正在做
lista=glob.glob(os.path.join(args.thefolders,'path/this.json'))
for filen in lista:
print("Processing ",filen)
thefunction(filen,None,args.somepar)
我想做一些多进程映射,如
with ProcessPoolExecutor() as process_pool:
work_done=list(process_pool.map(partial(thefunction,somepar=args.somepar),lista))
但是我有点担心,因为这个函数涉及到I/O
如果访问的文件对于列表的每个成员都是不同的,那么执行上述使用是否安全?
如果文件不同,那么同时从不同进程进行IO操作是完全合理的。
如果文件是相同的,这样的操作是不安全的,并且需要使用同步原语,如锁,这将使多处理效率低下。