国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

python多進(jìn)程,全局變量未更新問(wèn)題,已解決

AlphaGooo / 1598人閱讀

摘要:多進(jìn)程,全局變量未更新問(wèn)題子進(jìn)程全局變量沒(méi)有按照預(yù)想的更新,導(dǎo)致數(shù)據(jù)沒(méi)有寫(xiě)入磁盤(pán)。另外,如果想在進(jìn)程間通行,請(qǐng)使用官方的隊(duì)列方法或者管道,因?yàn)槿肿兞吭诟高M(jìn)程和子進(jìn)程之間的值是獨(dú)立的,改變其中一個(gè)不會(huì)同步到另外的進(jìn)程。

python多進(jìn)程,全局變量未更新

問(wèn)題:子進(jìn)程全局變量沒(méi)有按照預(yù)想的更新,導(dǎo)致數(shù)據(jù)沒(méi)有寫(xiě)入磁盤(pán)。進(jìn)程池必須在if __name__ == "__main__"下面使用
復(fù)現(xiàn):見(jiàn)實(shí)驗(yàn)代碼
環(huán)境:centos7, python3.7
原因: 子進(jìn)程的__name__屬性值不是"__main__"
解決辦法:需要用到的資源要在if __name__ == "__main__":語(yǔ)句之前確定好。在這語(yǔ)句之后的值不會(huì)傳遞到子進(jìn)程里。

代碼
from multiprocessing import Pool

date = "初始日期"
def foo():
?    print(f"date的值: {date}")

if __name__ == "__main__":
?    date = "覆蓋初始日期"

?    # 多進(jìn)程,全部不能覆蓋
?    with Pool(2) as mypool:
?        for i in range(2):
?            print(f"進(jìn)程{i}:")
?            mypool.apply(foo,)

輸出:

進(jìn)程0:
date的值: 初始日期
進(jìn)程1:
date的值: 初始日期
總結(jié)

python的多進(jìn)程在類(lèi)Unix OS和Windows OS下的實(shí)現(xiàn)是不一樣的,前者可以使用fork,而后者是python解釋器新開(kāi)一個(gè)進(jìn)程,然后使用序列化需要用到的資源傳到那個(gè)進(jìn)程中,此時(shí)在子進(jìn)程的那些模塊下打印locals()會(huì)顯示里面的__name__字段并不是__main__(我的顯示的是_ua_main__)。
另外如果運(yùn)行python腳本的話,多進(jìn)程必須在if __name__ == "__main__":語(yǔ)句下才會(huì)執(zhí)行,不然會(huì)報(bào)錯(cuò)。
另外,如果想在進(jìn)程間通行,請(qǐng)使用官方的隊(duì)列方法或者管道,因?yàn)槿肿兞吭诟高M(jìn)程和子進(jìn)程之間的值是獨(dú)立的,改變其中一個(gè)不會(huì)同步到另外的進(jìn)程。

官網(wǎng)鏈接如下,里面對(duì)多進(jìn)程的一些注意點(diǎn)和坑都說(shuō)明的很清楚了:
https://docs.python.org/3/library/multiprocessing.html?highlight=multiprocessing#module-multiprocessing

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/43382.html

相關(guān)文章

  • Python_系統(tǒng)編程

    摘要:主進(jìn)程會(huì)等待所有的子進(jìn)程先結(jié)束,然后再結(jié)束主進(jìn)程。關(guān)閉進(jìn)程池,關(guān)閉后實(shí)例不再接收新的請(qǐng)求等待實(shí)例中的所有子進(jìn)程執(zhí)行完畢,主進(jìn)程才會(huì)退出,必須放在語(yǔ)句之后。主進(jìn)程一般都用來(lái)等待,任務(wù)在子進(jìn)程中執(zhí)行。 多任務(wù):同一個(gè)時(shí)間段中,執(zhí)行多個(gè)函數(shù)/運(yùn)行多個(gè)程序. 操作系統(tǒng)可以同時(shí)運(yùn)行多個(gè)任務(wù):操作系統(tǒng)輪流讓各個(gè)任務(wù)交替執(zhí)行,任務(wù)1執(zhí)行0.01秒,切換到任務(wù)2,任務(wù)2執(zhí)行0.01秒,再切換到任務(wù)3,...

    wuaiqiu 評(píng)論0 收藏0
  • Python 面試」第三次更新

    摘要:說(shuō)一下進(jìn)程線程以及多任務(wù)多進(jìn)程多線程和協(xié)程進(jìn)程概念一個(gè)程序?qū)?yīng)一個(gè)進(jìn)程,這個(gè)進(jìn)程被叫做主進(jìn)程,而一個(gè)主進(jìn)程下面還有許多子進(jìn)程。避免了由于系統(tǒng)在處理多進(jìn)程或者多線程時(shí),切換任務(wù)時(shí)需要的等待時(shí)間。 showImg(https://segmentfault.com/img/bVbuYxg?w=3484&h=2480); 閱讀本文大約需要 10 分鐘。 14.說(shuō)一下進(jìn)程、線程、以及多任務(wù)(多進(jìn)...

    wslongchen 評(píng)論0 收藏0
  • Python 面試」第四次更新

    摘要:解決的辦法在處理計(jì)算密集型任務(wù)時(shí),使用多進(jìn)程協(xié)程,發(fā)揮計(jì)算機(jī)多核的威力,而處理密集型,則可以使用多線程。至此,有關(guān)知識(shí)點(diǎn)的面試題就已告一段落,下次更新數(shù)據(jù)庫(kù),方面面試題。 showImg(https://segmentfault.com/img/bVbuYzy?w=3484&h=2480); 閱讀本文大約需要 5 分鐘。 15.說(shuō)一說(shuō) GIL 前面有提到由于 Python 基于 C 語(yǔ)...

    hellowoody 評(píng)論0 收藏0
  • 精選50道Python面試題,快來(lái)看看你經(jīng)掌握了少道吧

    摘要:從存儲(chǔ)的字符串表示中檢索原始對(duì)象的過(guò)程稱(chēng)為。這稱(chēng)為命名空間。如果需要八進(jìn)制或十六進(jìn)制表示,請(qǐng)使用內(nèi)置函數(shù)或。和有什么區(qū)別返回對(duì)象,而返回列表,并使用相同的內(nèi)存,無(wú)論范圍大小是多少。它提供了靈活性,并允許開(kāi)發(fā)人員為他們的項(xiàng)目使用正確的工具。 ...

    zzir 評(píng)論0 收藏0
  • python進(jìn)階筆記【1】--- 進(jìn)程

    摘要:很簡(jiǎn)單,這個(gè)模塊實(shí)現(xiàn)了開(kāi)辟一塊共享內(nèi)存空間,就好比中的方法一樣,有興趣的同學(xué)可以去查閱。查了下資料,返回的對(duì)象控制了一個(gè)進(jìn)程,可用于多進(jìn)程之間的安全通信,其支持的類(lèi)型有和等。 有關(guān)于 multiprocessing 中共享變量的問(wèn)題 現(xiàn)在的cpu都很強(qiáng)大,比方我用的至強(qiáng)2620有24核可以同時(shí)工作,并行執(zhí)行進(jìn)程程序。這在計(jì)算密集型的程序是很需要的,如沙漠中的綠洲,令人重獲新生。那么,問(wèn)...

    Wildcard 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<