# 以后我们会尝试使用数据库类解决现在进程之间的数据共享问题# multiprocessing.Manager模块,是数据共享用的模块,共享的数据存在数据不安全问题,需要加锁操作# from multiprocessing import Manager, Process### def process1(dic):# dic['count'] = 5# print('子进程修改了dic')### if __name__ == '__main__':# m = Manager() # 创建了一个数据共享的载体# dic = m.dict({'count':100}) # 用这个数据共享的载体创建了一个具有进程间数据共享的字典# print('主进程的', dic) # {'count': 100}# p = Process(target=process1, args=(dic, ))# p .start()# p.join()# print('主进程的', dic) # {'count': 5}# # 多个进程同时修改数据共享的那个数据时,会出现数据不安全性# # 下面的例子就是模拟多个进程同时修改一个数据共享的的数据,造成数据不安全的问题,解决办法是加锁## from multiprocessing import Manager, Process### def process1(dic):# dic['count'] -= 1# #print('子进程修改了dic')### if __name__ == '__main__':# m = Manager() # 创建了一个数据共享的载体# dic = m.dict({'count':100}) # 用这个数据共享的载体创建了一个具有进程间数据共享的字典# p_lst = []# print('主进程的', dic) # {'count': 100}# for i in range(50):# p = Process(target=process1, args=(dic, ))# p .start()# p_lst.append(p)# for i in p_lst:# i.join()# print('主进程的', dic) # 可能是{'count': 50},也可能是主进程的 {'count': 不定值}# 多个进程同时修改数据共享的那个数据时,会出现数据不安全性, 解决办法是加锁from multiprocessing import Manager, Process, Lockdef process1(dic, lock): lock.acquire() dic['count'] -= 1 lock.release() #print('子进程修改了dic')if __name__ == '__main__': lock = Lock() m = Manager() # 创建了一个数据共享的载体 dic = m.dict({ 'count':100}) # 用这个数据共享的载体创建了一个具有进程间数据共享的字典 p_lst = [] print('主进程的', dic) # {'count': 100} for i in range(50): p = Process(target=process1, args=(dic, lock)) p .start() p_lst.append(p) for i in p_lst: i.join() print('主进程的', dic) # 可能是{'count': 50},也可能是主进程的 {'count': 不定值}# 实际上用的多的还是multiprocessing.Queue # 但是Queue只能实现一个Python代码启动的进程子进程之间的互相使用# 而kafak(大数据的消息中间件)、rebbitmq、memcache这些个消息中间件,可以实现跨电脑、跨代码的进程间通信 # 比如一台服务器上装了一个memcache,一台电脑上的代码可以给这个memcache传递消息,另一台电脑上的代码可以从这个memcache取消息数据