En multiproceso, cada proceso abre espacio y los datos no se comparten. Si desea compartir sus datos en cada proceso, debe usar el Administrador
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)
Por cierto, aquí: los datos en varios subprocesos se comparten (los datos de recursos en el mismo proceso son compartidos por varios subprocesos en el proceso), por ejemplo (aquí se usa un diccionario, por ejemplo, si la variable entrante no se puede aplicar directamente):
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()