进程之间内存是独立的,但其他资源是共享的,如可以操作同一个文件。
没有互斥锁的情况下,以下执行结果:
from multiprocessing import Process import time def task(name): print(‘%s 1‘ %name) time.sleep(1) print(‘%s 2‘ %name) time.sleep(1) print(‘%s 3‘ %name) if __name__ == ‘__main__‘: for i in range(3): p=Process(target=task,args=(‘进程%s‘ %i,)) p.start()
输出:
进程0 1 进程1 1 进程2 1 进程0 2 进程1 2 进程2 2 进程0 3 进程1 3 进程2 3
加互斥锁:
from multiprocessing import Process from multiprocessing import Lock # 要导入Lock import time def task(name, multi_lock): multi_lock.acquire() # 获得锁 print(‘%s 1‘ %name) time.sleep(1) print(‘%s 2‘ %name) time.sleep(1) print(‘%s 3‘ %name) multi_lock.release() #释放锁 if __name__ == ‘__main__‘: multi_lock = Lock() # 子进程会拷贝相同的内存,就会变成独立的锁,所以应该作为参数传给子进程 for i in range(3): p = Process(target=task, args=(‘进程%s‘ % i, multi_lock)) p.start()
# 互斥锁牺牲效率来保证数据不错乱
输出:
进程0 1
进程0 2
进程0 3
进程1 1
进程1 2
进程1 3
进程2 1
进程2 2
进程2 3
原文:https://www.cnblogs.com/beallaliu/p/9190443.html