1.锁 —— multiprocessing.Lock
当多个进程使用同一份数据资源的时候,就会引发数据安全或顺序混乱问题。
from multiprocessing import Process import random import time def func(addr): print('我是%s'%addr) time.sleep(random.random()) print('谢谢!') if __name__ == '__main__': l = ['四川的','湖南的','河南的','江苏的'] for addr in l: p = Process(target=func,args=(addr,)) p.start() time.sleep(2) print(' 我选%s'%random.choice(l)) # 关于抢占输出资源的事情,是指多进程并发执行时,并不是一个进程执行完任务后其他进程再执行。 # 比如 此程序会输出:我是四川的 我是河南的 我是江苏的 谢谢!谢谢!我是湖南的 谢谢! 谢谢! # 而不是 : 我是四川的 谢谢! 我是河南的 谢谢! ...
from multiprocessing import Process ,Lock import random import time def func(addr,lock): lock.acquire() print('我是%s'%addr) time.sleep(random.random()) print('谢谢!') lock.release() if __name__ == '__main__': lock = Lock() l = ['四川的','湖南的','河南的','江苏的'] for addr in l: p = Process(target=func,args=(addr,lock)) p.start() time.sleep(4) print(' 我选%s'%random.choice(l))
from multiprocessing import Process,Lock import time def check(i): with open('a') as f : num = f.read() print('第%s个人在查票,余票为%s' % (i,num)) def buy(i,l): l.acquire() with open('a') as f : num = int(f.read()) time.sleep(0.1) if num >0 : print('