Python多进程入门,分布式进程数据共享实例详解

  

本文实例讲述了Python多进程入门,分布式进程数据共享。分享给大家供大家参考,具体如下:

  

  https://docs.python.org/3/library/multiprocessing.html

  

1,先来个简单的

        utf - 8编码:   从多处理导入过程   #定义函数   def addUser ():   print (“addUser”)   if __name__==癬_main__”:   p1=过程(目标=addUser)   p1.start ()      之前      

多进程包<代码>多处理>   创建进程<代码> p1=过程(目标=函数名),
  开始进程<代码> p1.start()

  

2,通过进程ID来区分父子进程

        utf - 8编码:   从多处理导入过程   进口操作系统   #定义一个列表   myList=(“a”、“b”);   #定义函数   def addUser(列表):   print (os.getpid()) #进程ID   print (os.getppid()) #父进程ID   if __name__==癬_main__”:   p1=过程(目标=addUser, args=(myList,))   p1.start ()   #这里是主进程   打印(“父进程ID: " + str (os.getpid())) #进程ID      之前      
  

父进程ID: 27084
  27085年
  27084年

     

3,主进程等等子进程执行完毕

        #定义一个列表   myList=(“a”、“b”);   #定义函数   def addUser(列表):   list.append (“c”)   print(列表)   if __name__==癬_main__”:   p1=过程(目标=addUser, args=(myList,))   p1.start ()   打印(myList)      之前      
  

[a, b]
  [' a ', ' b ', ' c ']

     

主线程的<代码>打印(myList) 先于子进程的<代码>打印(列表)执行。

  

在主进程里,只需要加一句代码:

        p1.join() #等待子进程执行完毕   打印(myList)      之前      
  

[' a ', ' b ', ' c ']
  [a, b]

     

执行的顺序就不一样了。

  

  

通过<代码> 经理实现数据共享。

  

经理会创建一个服务进程,其他的进程都统一来访问这个服务器进程,从而达到多进程之间的数据通信。

  

一旦主进程结束,则服务器进程也讲结束

  

1,不多说,直接上代码

        utf - 8编码:   从多处理导入过程,经理   #定义函数   def addUser(列表):   list.append (“c”) #给列表添加了一个元素   print(列表)   if __name__==癬_main__”:   下=经理()   my_list=mgr.list ([“a”、“b”]) #通过经理对象创建列表   p1=过程(目标=addUser, args=(my_list,))   p1.start ()   p1.join ()   打印(my_list)      之前      

注意2次打印列表,在子进程(addUser())里还改变了列表数据。我们看看2次打印结果:

  
  

[' a ', ' b ', ' c ']
  [' a ', ' b ', ' c ']

     

说明通过经理对象创建的表数据能够在进程之间通信了。

  

2,分布式的数据共享
  https://docs.python.org/3/library/multiprocessing.html

  

2.1,创建一个服务器

  

datamgr.py内容如下:

        utf - 8编码:   多处理。经理进口BaseManager   if __name__==癬_main__”:   下=BaseManager(地址=(127.0.0.1,50000),authkey=b 'password”)   经理注册(“getUser”,可调用=λ:[“a”、“b”))   #服务器永不关闭   服务器=mgr.get_server ()   server.serve_forever ()      之前      

作为数据提供者。

  

2.2,在test.py里(可能是另外一台服务器里)连接这个服务器

        utf - 8编码:   从多处理导入过程,经理   多处理。经理进口BaseManager   if __name__==癬_main__”:   下=BaseManager(地址=(127.0.0.1,50000),authkey=b 'password”)   mgr.register (“getUser”)   mgr.connect() #连接远程的服务器   my_list=mgr.getUser() #从服务器获取数据   打印(my_list) # [a, b]      之前      

连上了,并获取到了数据。

  

3,创建2个子进程,修改列表数据,看看是不是能够共享?

        #定义函数   def addUser(列表):   list.append (“c”)   def addUser2(列表):   list.append (“d”)   if __name__==癬_main__”:   下=BaseManager(地址=(127.0.0.1,50000),authkey=b 'password”)   mgr.register (“getUser”)   mgr.connect() #连接远程的服务器   my_list=mgr.getUser() #从服务器获取数据   #创建2个子进程   p1=过程(目标=addUser, args=(my_list,))   p1.start ()   p2=过程(目标=addUser2 args=(my_list,))   p2.start ()   #等待2个子进程执行完毕   p1.join ()   p2.join ()   #在主进程打印最终的列表   打印(my_list) # [a, b, c, d的)      

Python多进程入门,分布式进程数据共享实例详解