日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

自学Python 57 多线程开发(七)使用 Connection对象和共享对象 Shared

發布時間:2023/12/18 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自学Python 57 多线程开发(七)使用 Connection对象和共享对象 Shared 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

? Python 使用 Connection對象和共享對象 Shared

活動地址:CSDN21天學習挑戰賽


文章目錄

  • ? Python 使用 Connection對象和共享對象 Shared
  • 一、使用 Connection對象
  • 二、使用共享對象 Shared


??本文在多線程開發(五)和(六)的基礎上繼續學習multiprocessing模塊中的內容。


一、使用 Connection對象

??在Python程序中,Connection 對象允許發送和接收可拾取對象或字符串,它們可以被認為是面向消息的連接套接字。例如在下面的實例文件中,演示了使用Connection對象處理數據的過程。

from multiprocessing import Pipe a,b = Pipe() a.send([1,'暑假要結束了!',None]) print(b.recv()) b.send_bytes(b'thank you') print (a.recv_bytes()) import array arr1 = array.array('i', range(5)) arr2 = array.array('i', [0] * 10) a.send_bytes(arr1) count = b.recv_bytes_into(arr2) assert count == len(arr1) * arr1.itemsize print(arr2)

??執行后會輸出:

二、使用共享對象 Shared

??在 Python程序中,可以使用由子進程繼承的共享內存創建共享對象,這樣會返回從共享內存分配的ctypes對象。共享對象Shared主要句含加下所示的兩個核心方法。
??(1) multiprocessing.Value(typecode_or_type,* args, lock=True)
??參數說明如下表所示。

參數名稱描述
返回值在默認情況下,返回值實際上是對象的同步包裝器。對象本身可以通過Value的值屬性訪問
參數typecode_or_type確定返回對象的類型,是ctypes類型或array模塊使用的類型的一個字符類型代碼
參數*args被傳遞給類型的構造函數
參數lock如果lock為 True(默認值),則創建一個新的遞歸鎖對象,以同步對該值的訪問。如果lock是 Lock或 RLock 對象,那么它將用于同步對該值的訪問。如果lock是False,那么對返回對象的訪問將不會被鎖自動保護,因此它不一定是“進程安全的”

??(2)multiprocessing.Array(typecode_or_type, size_or_initializer,*, lock=True)
??參數說明如下表所示。

參數名稱描述
返回值返回從共享內存分配的ctypes數組。在默認情況下,返回值實際上是數組的同步包裝器
typecode_or_type確定返回數組的元素類型,是 ctypes類型或array模塊使用的類型的一個字符類型代碼
size_or_initializer如果size_or_initializer是一個整數,則它確定數組的長度,并且數組將初始置零。否則 size_or_initializer是用于初始化數組的序列,其長度決定了數組的長度
Lock如果lock為 True(默認值),則創建一個新的鎖對象,以同步對該值的訪問。如果lock是Lock或RLock對象,那么它將用于同步對該值的訪問。如果lock是False,那么對返回的對象的訪問將不會被鎖自動保護,因此它不一定是“進程安全的”。請注意,lock是一個僅關鍵字的參數

??例如在下面的實例中,演示了使用 Shared 對象將共享內容創建共享ctypes對象的過程。

from multiprocessing import Process,Lock from multiprocessing.sharedctypes import Value, Array from ctypes import Structure,c_double class Point(Structure):_fields_ = [('x', c_double),('y', c_double)] def modify(n, x, s, A):n.value **= 2x.value **= 2s.value = s.value.upper()for a in A:a.x **= 2a.y **= 2 if __name__ == '__main__':lock = Lock()n = Value('i',7)x = Value(c_double, 1.0/3.0, lock=False)s = Array ('c', b'hello world', lock=lock)A = Array(Point, [(1.875,-6.25), (-5.75,2.0), (2.375,9.5)], lock=lock)p = Process(target=modify, args=(n,x,s,A))p.start()p.join()print(n.value)print(x.value)print(s.value)print([(a.x, a.y) for a in A])

??執行后會輸出:

總結

以上是生活随笔為你收集整理的自学Python 57 多线程开发(七)使用 Connection对象和共享对象 Shared的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。