python多進(jìn)程共享變量Value使用tips

前言:

在使用tornado的多進(jìn)程時(shí),需要多個(gè)進(jìn)程共享一個(gè)狀態(tài)變量,于是考慮使用multiprocessing.Value(對(duì)于該變量的具體細(xì)節(jié)請(qǐng)查閱相關(guān)資料)。在根據(jù)網(wǎng)上資料使用Value時(shí),由于共享的是字符串,但網(wǎng)上介紹的都是整數(shù)或者字符,于是遇到了很多阻礙,通過查詢官方文檔得出了解決方案。

一、Value的構(gòu)造函數(shù):

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

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

該方法返回從共享內(nèi)存中分配的一個(gè)ctypes 對(duì)象,其中typecode_or_type定義了返回的類型。它要么是一個(gè)ctypes類型,要么是一個(gè)代表ctypes類型的code。比如c_bool和'b'是同樣的,因?yàn)?b'是c_bool的code。

ctypes是Python的一個(gè)外部函數(shù)庫(kù),它提供了和C語(yǔ)言兼任的數(shù)據(jù)類型,可以調(diào)用DLLs或者共享庫(kù)的函數(shù),能被用作在python中包裹這些庫(kù)。

*args是傳遞給ctypes的構(gòu)造參數(shù)

二、Value的使用

對(duì)于共享整數(shù)或者單個(gè)字符,初始化比較簡(jiǎn)單,參照下圖映射關(guān)系即可。如i = Value('i', 1), c = Value('c', '0')。

image

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

  >> size = ctypes.sizeof(type_)

  TypeError: this type has no size

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

例如

  from ctypes import c_char_p

  ss = Value(c_char_p, 'ss')

ctype類型可從下表查閱

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Python 3的多進(jìn)程 多進(jìn)程庫(kù)名叫multiprocessing。有幾點(diǎn)記錄一下: multiprocessi...
    小溫侯閱讀 3,647評(píng)論 0 2
  • 個(gè)人筆記,方便自己查閱使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik閱讀 67,948評(píng)論 0 5
  • 1簡(jiǎn)介 ctypes是一個(gè)自Python 2.5開始引入的,Python自帶的函數(shù)庫(kù)。其提供了一系列與C、C++語(yǔ)...
    櫻雨樓閱讀 15,114評(píng)論 8 10
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,246評(píng)論 0 38
  • 白發(fā)戴花君莫笑,歲月從不敗美人。 人生,就像一趟列車,有人穿過,有人登車,有人離去,但總有些人會(huì)在你的記憶力徜徉,...
    葉亦宸閱讀 404評(píng)論 0 1

友情鏈接更多精彩內(nèi)容