真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python進(jìn)程間共享數(shù)據(jù)的方法-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)長期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為輝南企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、做網(wǎng)站,輝南網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
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)

上述代碼打印結(jié)果:

python進(jìn)程間共享數(shù)據(jù)的方法

注意看紅色框住的內(nèi)容,多次測試我發(fā)現(xiàn),在共享字符串的時候,在主進(jìn)程中的初始化決定了這個字符串的長度,

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

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

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

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

于是得出這樣一個結(jié)論,如果你要共享一個字符串,那么在子進(jìn)程中賦值時必須賦值長度相當(dāng)?shù)淖址?。建議在子進(jìn)程中可以先檢查字符串長度,然后在根據(jù)需要拼接指定長度的字符串

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

多進(jìn)程間共享數(shù)據(jù),可以使用 multiprocessing.Value 和 multiprocessing.Array

Value(typecode_or_type, *args[, lock])
Value函數(shù)返回一個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 默認(rèn)值是True:創(chuàng)建一個新的lock來控制對value的訪問。該參數(shù)也可以是 multiprocessing.Lock 或 multiprocessing.RLock 對像,用來控制對value的訪問

感謝各位的閱讀,以上就是“python進(jìn)程間共享數(shù)據(jù)的方法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對python進(jìn)程間共享數(shù)據(jù)的方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!


本文標(biāo)題:python進(jìn)程間共享數(shù)據(jù)的方法-創(chuàng)新互聯(lián)
文章起源:http://weahome.cn/article/dccoio.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部