2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 多进程之间共享全局变量 python实现

多进程之间共享全局变量 python实现

时间:2019-09-12 05:39:08

相关推荐

多进程之间共享全局变量  python实现

线程之间是可以正常共享全局变量的,因为是共用同一片空间的,而进程之间所使用的是不同的内存空间

所以线程之间可以共享全局变量,因为共用一片空间

不同进程使用不同的空间,所以使用的资源本质上是不同的,所以一片空间上的变量变化了不会影响另一个空间的资源变化。

通过代码来对比2者的区别:

多线程实现:

import threadingimport timenum = 100def demo1():global numnum += 100print(f'----demo1---num={num}')def demo2():print(f'------demo2-----num={num}')def main():t1 = threading.Thread(target=demo1)t2 = threading.Thread(target=demo2)t1.start()t2.start()if __name__ == '__main__':main()

运行结果:

----demo1—num=200

------demo2-----num=200

说明线程之间共享了该全局变量

进程代码:

import multiprocessingimport timenum = 100lst = []def main():p1 = multiprocessing.Process(target=demo1)p2 = multiprocessing.Process(target=demo2)p1.start()p2.start()def demo1():global numnum += 100print(f'-----demo1----{num}')lst.append(num)print(lst)#time.sleep(1)def demo2():time.sleep(1)print(f'-----demo2----{num}')print(lst)if __name__ == '__main__':main()

执行结果:

-----demo1----200

[200]

-----demo2----100

[]

从执行结果可以验证不同进程,全局变量是不可以共享的

在此我测试了列表和全局变量num

那么该如何实现全局变量的进程共享呢?通过进程间交互的桥梁:Quene,这是multiprocess的内置类

import multiprocessingfrom multiprocessing import Queuedef download(q):lst = [1,2,3]for i in lst:q.put(i)print('添加完毕')def manage_data(q):#将队列的元素取出来,存到新的列表中man_data = list()while True:data = q.get()man_data.append(data)if q.empty():breakprint(man_data)def main():q = Queue()p1 = multiprocessing.Process(target=download,args=(q,))p2 = multiprocessing.Process(target=manage_data,args=(q,))p1.start()p2.start()

执行结果:

添加完毕

[1, 2, 3]

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。