多进程中,各个进程开辟空间,数据是不共享的,如果想让其数据在各个进程中实现共享,需要借助Manager
from multiprocessing import Process
from multiprocessing import Manager
from multiprocessing import Lock
def change_dic(dic,lock):
# lock.acquire() # 互斥锁上锁
dic["count"] -= 1
# print(dic)
# lock.release() # 互斥锁解锁
if __name__ == "__main__":
m = Manager()
dic = m.dict({
"count":100})
lock = Lock()
p_1 = []
for i in range(100):
# p = Process(target=change_dic,args=(dic,))
p = Process(target=change_dic,args=(dic,lock))
p.start()
p_1.append(p)
for p in p_1:
p.join()
print(dic)
这里顺带一提:多线程中数据是共享的(同一进程内的资源数据对于该进程中的多个线程来说是共享的),举个例子(这里用字典举例,如果传入的是变量不能直接套用):
from threading import Thread
def task(dic):
dic["count"] -= 1
print(dic["count"])
if __name__ == "__main__":
dic = {
"count":50}
for i in range(50):
t = Thread(target=task,args=(dic,))
t.start()