一、 进程锁(Lock):
1.1 定义:
1. 同一时刻同一段代码,只能有一个进程来执行这段代码
2. 锁的应用场景,当多个进程需要操作同一个文件/数据库的时候 ,
3. 会产生数据不安全,我们应该使用锁来避免多个进程同时修改一个文件
1.2 示例:
# 示例: import json import time from multiprocessing import Process, Lock # 查询余票 def search_ticket(name): with open('ticket', encoding='utf-8') as f: dic = json.load(f) print('%s查询余票为%s' % (name, dic['count'])) # 购买车票 def buy_ticket(name): with open('ticket', encoding='utf-8') as f: dic = json.load(f) time.sleep(2) if dic['count'] >= 1: print('%s买到票了' % name) dic['count'] -= 1 time.sleep(2) with open('ticket', mode='w', encoding='utf-8') as f: json.dump(dic, f) else: print('余票为0,%s没买到票' % name) # 使用线程锁方式一: def use1(name, lock): search_ticket(name) print('%s在等待' % name) lock.acquire() print('%s开始执行了' % name) buy_ticket(name) lock.release() # 使用线程锁方式二: def use2(name, lock): """ # with lock: # 代码块 # 上下文管理:在__enter__方法中获取锁(acquire),在__exit__方法中释放锁(release) """ search_ticket(name) print('%s在等待' % name) with lock: print('%s开始执行了' % name) buy_ticket(name) if __name__ == '__main__': lock = Lock() l = ['alex', 'wusir', 'baoyuan', 'taibai'] for name in l: Process(target=use1, args=(name, lock)).start() # 方式一 Process(target=use2, args=(name, lock)).start() # 方式二