中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python進程間共享數據的方法

發布時間:2021-09-14 03:25:00 來源:億速云 閱讀:176 作者:chen 欄目:編程語言

這篇文章主要講解了“python進程間共享數據的方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python進程間共享數據的方法”吧!

def worker(num, mystr, arr):
    num.value *= 2
    mystr.value = "ok"
    for i in range(len(arr)):
        arr[i] = arr[i] * (-1) + 1.5

def dump_vars(num, mystr, arr):
    print 'num: ', num.value
    print 'str: ', mystr[:]
    print 'arr: ', arr[:]

if __name__=='__main__':
    num = Value('i', 5)
    mystr = Array('c', 'just for test')
    arr = Array('d', [1.0, 1.5, -2.0])
    dir(str)
    print 'init value'
    dump_vars(num, mystr, arr)

    ps = [Process(target=worker, args=(num, mystr, arr)) for x in range(3)]
    for p in ps:
        p.start()
    for p in ps:
        p.join()

    print
    print 'after all workers finished'
    dump_vars(num, mystr, arr)

上述代碼打印結果:

python進程間共享數據的方法

注意看紅色框住的內容,多次測試我發現,在共享字符串的時候,在主進程中的初始化決定了這個字符串的長度,

創建后字符串的長度固定不變,相當于把這個字符串所在的地址復制給一個指針,并且在字符串的首地址記錄了自身的長度,

在以后讀取這個值的時候就會去讀取那一段固定長度的內容,而不管現在的新內容長度是多少,舉個例子:

比如我們在主進程初始化一段字符串  "abcde",一旦初始化,長度就固定了,現在長度是5,然后我們在其他進程賦值,我們嘗試賦值為

"abcdefg",此時執行會報錯,因為長度超標了,我們在賦值為 "yes",最后輸出結果為 "yes&efg"(此處的&是代表一個不可顯示的字符,不同的環境下顯示不同,有可能顯示空格,有可能顯示null)。也就是說長短都不行,必須和初始化字符串等長。

于是得出這樣一個結論,如果你要共享一個字符串,那么在子進程中賦值時必須賦值長度相當的字符串。建議在子進程中可以先檢查字符串長度,然后在根據需要拼接指定長度的字符串

上面的分析建立在下面的基礎上,請先看下面的基本用法:

多進程間共享數據,可以使用 multiprocessing.Value 和 multiprocessing.Array

Value(typecode_or_type, *args[, lock])
Value函數返回一個shared memory包裝類,其中包含一個ctypes對象
typecode_or_type typecode列表如下
------------------------------------------------------------------
Type code   C Type      Python Type
'c'     char            character
'b'         signed char         int
'B'         unsigned char       int
'u'         Py_UNICODE      Unicode character
'h'         signed short        int
'H'         unsigned short      int
'i'         signed int      int
'I'         unsigned int        long
'l'         signed long         int
'L'         unsigned long       long
'f'         float       float
'd'         double      float
---------------------------------------------------------
Array(typecode_or_type, size_or_initializer, *, lock=True)
lock 默認值是True:創建一個新的lock來控制對value的訪問。該參數也可以是 multiprocessing.Lock 或 multiprocessing.RLock 對像,用來控制對value的訪問

感謝各位的閱讀,以上就是“python進程間共享數據的方法”的內容了,經過本文的學習后,相信大家對python進程間共享數據的方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西乡县| 岱山县| 吉木萨尔县| 隆昌县| 祁东县| 小金县| 周宁县| 丹寨县| 扬中市| 高雄市| 高唐县| 南丹县| 张北县| 鄢陵县| 湾仔区| 根河市| 阳西县| 西藏| 通化市| 潮州市| 沧源| 宁化县| 峡江县| 临清市| 嘉兴市| 林甸县| 太仓市| 闵行区| 澜沧| 贡嘎县| 麻江县| 扶风县| 正安县| 上虞市| 宁夏| 中江县| 茌平县| 高尔夫| 万州区| 安平县| 德昌县|