Python 多进程向同一个文件写数据

为了避免进程之间资源抢用的问题,并行将数据写入文件时,可能会导致文件内容混乱.

最直接的方式是,给文件加锁,但多进程时,加锁的效果和单进程就没多大区别了.

另一种思路是,将各个进程要写入文件的内容作为返回值返回到一个给定回调函数,由回调函数将内容写入文件.

还有一种更优雅的方式是,采用 multiprocessing 库的回调函数来实现. 如:

apply_async(func[, args[, kwds[, callback[, error_callback]]]])

map_async(func, iterable[, chunksize[, callback[, error_callback]]])

应用场景:

进程池中任何一个任务一旦处理完了,就立即告知主进程:任务已经好了,可以处理其结果了。主进程则调用一个函数去处理该结果,该函数即回调函数。可以把耗时间(阻塞)的任务放到进程池中,然后指定回调函数(主进程负责执行),这样主进程在执行回调函数时就省去了I/O的过程,直接拿到的是任务的结果。

示例如:

import multiprocessing

# 设置回调函数
def setcallback(x):
    with open('result.txt', 'a+') as f:
        line = str(x) + "\n"
        f.write(line)

def multiplication(num):
    return num*(num+1)

if __name__ == '__main__':
    pool = multiprocessing.Pool(6)
    for i in range(1000):
        pool.apply_async(func=multiplication, args=(i,), callback=setcallback)
    pool.close()
    pool.join()
Last modification:November 15th, 2022 at 02:52 pm