python多进程入门、分布式进程数据共享
来源:互联网 发布:办公软件高级是几级 编辑:程序博客网 时间:2024/06/05 14:56
python多进程入门
https://docs.python.org/3/library/multiprocessing.html
1、先来个简单的
# coding: utf-8from multiprocessing import Process# 定义函数def addUser(): print("addUser")if __name__ == "__main__": p1 = Process(target=addUser) p1.start()
多进程包multiprocessing
;
创建进程p1 = Process(target=函数名)
;
开始进程p1.start()
。
2、通过进程ID来区分父子进程
# coding: utf-8from multiprocessing import Processimport os# 定义一个listmyList = ["a","b"];# 定义函数def addUser(list): print(os.getpid()) # 进程ID print(os.getppid()) # 父进程IDif __name__ == "__main__": p1 = Process(target=addUser,args=(myList,)) p1.start() # 这里是主进程 print("父进程ID:"+str(os.getpid())) # 进程ID
父进程ID:270842708527084
3、主进程等等子进程执行完毕
# 定义一个listmyList = ["a","b"];# 定义函数def addUser(list): list.append("c") print(list)if __name__ == "__main__": p1 = Process(target=addUser,args=(myList,)) p1.start() print(myList)
['a', 'b']['a', 'b', 'c']
主线程的print(myList)
先于子进程的print(list)
执行。
在主进程里,只需要加一句代码:
p1.join() # 等待子进程执行完毕 print(myList)
['a', 'b', 'c']['a', 'b']
执行的顺序就不一样了。
分布式进程数据共享
通过Manager
实现数据共享。
Manager会创建一个服务进程,其他的进程都统一来访问这个server进程,从而达到多进程之间的数据通信。
一旦主进程结束,则server进程也讲结束
1、不多说,直接上代码
# coding: utf-8from multiprocessing import Process, Manager# 定义函数def addUser(list): list.append("c") # 给list添加了一个元素 print(list)if __name__ == "__main__": mgr = Manager() my_list = mgr.list(["a","b"]) # 通过Manager对象创建list p1 = Process(target=addUser,args=(my_list,)) p1.start() p1.join() print(my_list)
注意2次打印list,在子进程(addUser()
)里还改变了list数据。我们看看2次打印结果:
['a', 'b', 'c']['a', 'b', 'c']
说明通过Manager
对象创建的list数据能够在进程之间通信了。
2、分布式的数据共享
https://docs.python.org/3/library/multiprocessing.html
2.1、创建一个server
datamgr.py
内容如下:
# coding: utf-8from multiprocessing.managers import BaseManagerif __name__ == "__main__": mgr = BaseManager(address=('127.0.0.1', 50000), authkey=b'password') mgr.register("getUser", callable=lambda :["a","b"]) # server永不关闭 server = mgr.get_server() server.serve_forever()
作为数据提供者。
2.2、在test.py
里(可能是另外一台服务器里) 连接这个server
# coding: utf-8from multiprocessing import Process, Managerfrom multiprocessing.managers import BaseManagerif __name__ == "__main__": mgr = BaseManager(address=('127.0.0.1', 50000), authkey=b'password') mgr.register("getUser") mgr.connect() # 连接远程的server my_list = mgr.getUser() # 从server获取数据 print(my_list) # ['a', 'b']
连上了,并获取到了数据。
3、创建2个子进程,修改list数据,看看是不是能够共享?
# 定义函数def addUser(list): list.append("c")def addUser2(list): list.append("d")if __name__ == "__main__": mgr = BaseManager(address=('127.0.0.1', 50000), authkey=b'password') mgr.register("getUser") mgr.connect() # 连接远程的server my_list = mgr.getUser() # 从server获取数据 # 创建2个子进程 p1 = Process(target=addUser,args=(my_list,)) p1.start() p2 = Process(target=addUser2, args=(my_list,)) p2.start() # 等待2个子进程执行完毕 p1.join() p2.join() # 在主进程打印最终的list print(my_list) # ['a', 'b', 'c', 'd']
显然,在子进程里往list添加数据有效。
阅读全文
0 0
- python多进程入门、分布式进程数据共享
- Python 多进程 —— 共享数据
- python 进程间共享数据
- python进程间共享数据
- python 多进程共享变量
- python多进程共享内存
- Python多进程共享变量
- Python中多进程之间的数据共享
- python 多进程共享数据的读与写
- python 进程间共享数据 (一)
- python 进程间共享数据 (二)
- python 进程间共享数据 (三)
- Python的进程实现数据共享
- Python 进程之间共享数据(全局变量)
- Python 进程之间共享数据(全局变量)
- python基础-Manager进程数据共享、进程互斥锁数据非共享、线程互斥锁数据共享
- python分布式进程
- python分布式进程模型
- js实现webSocket客户端
- 分类模型与算法--贝叶斯分类器
- Proguard打包混淆报错:can't find superclass or interface
- 篮球队
- springboot个人博客系统---搭建项目环境(一)
- python多进程入门、分布式进程数据共享
- JDBC连接SQL SERVER 和JUNIT4单元测试
- Centos下搭建LNMP环境
- 11月21日云栖精选夜读:如何扛住1.8亿/秒的双11数据洪峰?阿里流计算技术全揭秘
- 大话设计模式读书笔记之原型模式
- npm安装全局模块之后项目提示找不到的解决
- C语言中的强符号与弱符号
- 入驻saas型教育平台系统或面临极大风险?
- C语言extern用法