1. 进程间通信
进程间内存资源隔离,互不干扰
进程间通信解决方案:Manager
Manager有三个方法:
Manager.list()
实例化一个可以在进程间通信的空列表
Manager.dict()
实例化一个可以在进程间通信的空字典
Manager.Queue()
实例化一个可以在进程间通信的空队列
from multiprocessing import Manager,Process
import random,os
def task(li):
li.append(random.randint(1,100))
print(li,id(mylist),os.getpid())
if __name__ == '__main__':
mylist = Manager().list()
t1 = Process(target=task,args=(mylist,))
t1.start()
t1.join()
print(mylist,id(mylist),os.getpid())
在不同的进程中取到了相同id的列表,Manager是属性是守护的,不写join()方法会报错。
2. 线程间通信
线程间资源共享,且相互竞争cpu,当多个线程同时运行时,数据不安全。通过互斥锁解决。
from threading import Thread, Lock
import time
a = 0
def func_a(lock):
global a
for i in range(100000):
lock.acquire()
a += 1
lock.release()
def func_b(lock):
global a
for i in range(100000):
lock.acquire()
a -= 1
lock.release()
if __name__ == '__main__':
lock = Lock()
t1 = Thread(target=func_a, args=(lock,))
t2 = Thread(target=func_b, args=(lock,))
t1.start()
t2.start()
time.sleep(5)
print(a)