欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python多進程入門、分布式進程數據共享實例詳解

 更新時間:2019年06月03日 11:47:48   作者:學習筆記666  
這篇文章主要介紹了Python多進程入門、分布式進程數據共享,結合實例形式詳細分析了Python進程操作技巧數據共享相關實現技巧與注意事項,需要的朋友可以參考下

本文實例講述了Python多進程入門、分布式進程數據共享。分享給大家供大家參考,具體如下:

python多進程入門

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

1、先來個簡單的

# coding: utf-8
from multiprocessing import Process
# 定義函數
def addUser():
  print("addUser")
if __name__ == "__main__":
  p1 = Process(target=addUser)
  p1.start()

多進程包multiprocessing;
創(chuàng)建進程p1 = Process(target=函數名);
開始進程p1.start()

2、通過進程ID來區(qū)分父子進程

# coding: utf-8
from multiprocessing import Process
import os
# 定義一個list
myList = ["a","b"];
# 定義函數
def addUser(list):
  print(os.getpid()) # 進程ID
  print(os.getppid()) # 父進程ID
if __name__ == "__main__":
  p1 = Process(target=addUser,args=(myList,))
  p1.start()
  # 這里是主進程
  print("父進程ID:"+str(os.getpid())) # 進程ID

父進程ID:27084
27085
27084

3、主進程等等子進程執(zhí)行完畢

# 定義一個list
myList = ["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)執(zhí)行。

在主進程里,只需要加一句代碼:

p1.join() # 等待子進程執(zhí)行完畢
print(myList)

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

執(zhí)行的順序就不一樣了。

分布式進程數據共享

通過Manager實現數據共享。

Manager會創(chuàng)建一個服務進程,其他的進程都統(tǒng)一來訪問這個server進程,從而達到多進程之間的數據通信。

一旦主進程結束,則server進程也講結束

1、不多說,直接上代碼

# coding: utf-8
from 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對象創(chuàng)建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對象創(chuàng)建的list數據能夠在進程之間通信了。

2、分布式的數據共享
https://docs.python.org/3/library/multiprocessing.html

2.1、創(chuàng)建一個server

datamgr.py內容如下:

# coding: utf-8
from multiprocessing.managers import BaseManager
if __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-8
from multiprocessing import Process, Manager
from multiprocessing.managers import BaseManager
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獲取數據
  print(my_list) # ['a', 'b']

連上了,并獲取到了數據。

3、創(chuàng)建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獲取數據
  # 創(chuàng)建2個子進程
  p1 = Process(target=addUser,args=(my_list,))
  p1.start()
  p2 = Process(target=addUser2, args=(my_list,))
  p2.start()
  # 等待2個子進程執(zhí)行完畢
  p1.join()
  p2.join()
  # 在主進程打印最終的list
  print(my_list) # ['a', 'b', 'c', 'd']

顯然,在子進程里往list添加數據有效。

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python進程與線程操作技巧總結》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》、《Python+MySQL數據庫程序設計入門教程》及《Python常見數據庫操作技巧匯總

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • 一篇文章帶你了解python標準庫--os模塊

    一篇文章帶你了解python標準庫--os模塊

    在本篇內容里小編給大家整理的是關于Python中os模塊及用法相關知識點,有興趣的朋友們可以學習下,希望能給你帶來幫助
    2021-08-08
  • Python面向對象之類和實例用法分析

    Python面向對象之類和實例用法分析

    這篇文章主要介紹了Python類和實例用法,較為詳細的分析了Python面向對象程序設計中類、實例、構造函數、析構函數、私有變量等相關概念與使用技巧,需要的朋友可以參考下
    2019-06-06
  • python刪除某個目錄文件夾的方法

    python刪除某個目錄文件夾的方法

    在本篇文章里小編給大家分享的是關于python刪除某個目錄文件夾的方法,有興趣的朋友們可以學習下。
    2020-05-05
  • Python使用CRC32實現校驗文件

    Python使用CRC32實現校驗文件

    CRC文件校驗是一種用于驗證文件完整性的方法,通過計算文件的CRC值并與預先計算的CRC校驗值進行比較,來判斷文件是否發(fā)生變化,本文我們就來介紹一下Python如何利用CRC32實現校驗文件吧
    2023-10-10
  • 一篇文章帶你了解谷歌這些大廠是怎么寫 python 代碼的

    一篇文章帶你了解谷歌這些大廠是怎么寫 python 代碼的

    這篇文章主要介紹了谷歌這些大廠怎么寫python代碼,我們寫代碼,往往還是按照其它語言的思維習慣來寫,那樣的寫法不僅運行速度慢,代碼讀起來也費盡,給人一種拖泥帶水的感覺,需要的朋友可以參考下
    2021-09-09
  • Python 常用日期處理 -- calendar 與 dateutil 模塊的使用

    Python 常用日期處理 -- calendar 與 dateutil 模塊的使用

    這篇文章主要介紹了Python如何使用calendar 與 dateutil 模塊處理日期,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-09-09
  • Numpy創(chuàng)建數組和隨機數組的方法小結

    Numpy創(chuàng)建數組和隨機數組的方法小結

    這篇文章主要為大家詳細介紹了Numpy創(chuàng)建數組和隨機數組的方法小結,文中的示例代碼講解詳細,對我們學習Python有一定幫助,具有一定的參考價值,需要的可以參考一下
    2023-11-11
  • 把項目從Python2.x移植到Python3.x的經驗總結

    把項目從Python2.x移植到Python3.x的經驗總結

    這篇文章主要介紹了把項目從Python2.x移植到Python3.x的經驗總結,包括作者所使用的Jinja2框架中一些需要注意的地方,需要的朋友可以參考下
    2015-04-04
  • 一文帶你了解Python閉包的基本用法

    一文帶你了解Python閉包的基本用法

    Python 是一種高級編程語言,擁有強大的功能和工具庫。Python 的閉包是一個強大的編程概念,可以幫助程序員編寫更加模塊化、可重用的代碼。本文將深入介紹 Python 的閉包,從概念、定義、實現、應用等多個角度詳細闡述
    2023-03-03
  • 解決Spyder中圖片顯示太小的問題

    解決Spyder中圖片顯示太小的問題

    下面小編就為大家分享一篇解決Spyder中圖片顯示太小的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04

最新評論