1. 为什么要使用进程锁
1.1 当使用多进程对同一共享资源进行使用时,可能会出现各种问题,例如数据写入文件时顺序错误、当进程需要依
次修改同一个数据时,第一个进程还未完成修改,第二个进程就读取未经修改的数据进行修改。
2. 如何实现进程锁
2.1
import multiprocessing
def work(f, item, lock):
# 2). 开始此任务前,为防止数据写入顺序混乱,对此任务进行加锁
lock.acquire()
try:
with open(f, 'a+') as f:
f.write("a %s task\n" % (item))
except Exception as e:
print("产生异常...")
finally:
#3). 完成此任务后对此任务进行解锁
lock.release()
def main():
# 1). 实例化一个进程锁
lock = multiprocessing.Lock()
filename = 'doc/my.log'
processes = []
for i in range(4):
p1 = multiprocessing.Process(target=work, args=(filename, i, lock))
p1.start()
processes.append(p1)
[process.join() for process in processes]
if __name__ == '__main__':
main()