python多進程共享變量Value使用tips


前言:

  在使用tornado的多進程時,需要多個進程共享一個狀態變量,於是考慮使用multiprocessing.Value(對於該變量的具體細節請查閱相關資料)。在根據網上資料使用Value時,由於共享的是字符串,但網上介紹的都是整數或者字符,於是遇到了很多阻礙,通過查詢官方文檔得出了解決方案。

 

一、Value的構造函數:

  Value的初始化非常簡單,直接類似Value('d', 0.0)即可,具體構造方法為:

  multiprocessing.Value(typecode_or_type*args[, lock])。

  該方法返回從共享內存中分配的一個ctypes 對象,其中typecode_or_type定義了返回的類型。它要么是一個ctypes類型,要么是一個代表ctypes類型的code。比如c_bool和'b'是同樣的,因為'b'是c_bool的code。

  ctypes是Python的一個外部函數庫,它提供了和C語言兼任的數據類型,可以調用DLLs或者共享庫的函數,能被用作在python中包裹這些庫。

  *args是傳遞給ctypes的構造參數

 

二、Value的使用

  對於共享整數或者單個字符,初始化比較簡單,參照下圖映射關系即可。如i = Value('i', 1), c = Value('c', '0')。  

  注意,如果我們使用的code在上表不存在,則會拋出:

    size = ctypes.sizeof(type_)

  TypeError: this type has no size

 

   如果共享的是字符串,則在上表是找不到映射關系的,就是沒有code可用。所以我們需要使用原始的ctype類型

  例如 

  from ctypes import c_char_p

  ss = Value(c_char_p, 'ss')

  ctype類型可從下表查閱

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM