亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Python: Windows下用multiprocessing的深坑

forrest23 / 1540人閱讀

摘要:今天在測試多進(jìn)程時(shí)發(fā)現(xiàn)了一個(gè)問題測試代碼上述代碼不復(fù)雜肉眼就能猜出八九分父進(jìn)程來執(zhí)行了首尾的兩個(gè)而子進(jìn)程則只執(zhí)行下面就這針對(duì)這一個(gè)猜測來驗(yàn)證在下很符合我們的預(yù)期因?yàn)閮纱蔚玫搅艘粯拥慕Y(jié)果而子進(jìn)程的那句輸出也從側(cè)面驗(yàn)證了另外兩句是父進(jìn)程執(zhí)行的接

今天在測試多進(jìn)程時(shí), 發(fā)現(xiàn)了一個(gè)問題

測試代碼:

#coding: utf8
from multiprocessing import Process 
import os 
print("Global_print", os.getpid())
def run_proc(name):

    print("Run child process %s (%s)…" % (name, os.getpid()))
if __name__=="__main__": 
    p = Process(target=run_proc, args=("test",)) 
    print(os.getpid()) 
    p.start() 

上述代碼不復(fù)雜, 肉眼就能猜出八九分: 父進(jìn)程來執(zhí)行了首尾的兩個(gè)print, 而子進(jìn)程則只執(zhí)行run_proc ,

下面就這針對(duì)這一個(gè)猜測來驗(yàn)證:

LInux下,

"Global_print", 14382
14382
Run child process test (14383)…

很符合我們的預(yù)期, 因?yàn)閮纱?b>os.getpid()得到了一樣的結(jié)果, 而子進(jìn)程的那句輸出也從側(cè)面驗(yàn)證了另外兩句print是父進(jìn)程執(zhí)行的.

接下來看下Windows:

What ???...黑人問號(hào)..這是什么鬼..分分鐘被打臉...

在測試了debian/centos等等 unix/linux不同發(fā)行版和不同Python版本, 表現(xiàn)均為一致, 也就是上面Linux的輸出.

然而..在Windows下也也是很頑固的和上面的輸出不一致..

總所周知, WindowsLinux在實(shí)現(xiàn)多進(jìn)程上面是有點(diǎn)區(qū)別的..

于是, 感覺應(yīng)該是Windows自身的問題, 在咨詢了大佬之后, 得知官網(wǎng)早已有對(duì)這塊進(jìn)行說明了:

傳送門: https://docs.python.org/2/lib...

摘抄資料如下:

簡單的意思應(yīng)該是下面這樣:

因?yàn)?b>Windows缺乏linix那種fork, 所以它會(huì)有一些額外的限制:

不管是綁定還是未綁定的方法, 都不要直接作為參數(shù)傳給Process初始化的target, 相反應(yīng)該要用普通的函數(shù)代替

子進(jìn)程在訪問全局變量時(shí), 可能會(huì)與父進(jìn)程的值不同. ( 模塊級(jí)別的常量沒這問題 )

開啟新Python解析器或者創(chuàng)建新process時(shí), 確定主模塊能夠安全的導(dǎo)入.

而剛才的那個(gè)問題, 就是因?yàn)闆]有注意到第三點(diǎn), 所以導(dǎo)致了意想不到的的副作用, 應(yīng)該用下面的寫法取代上面的不安全寫法:

from multiprocessing import Process, freeze_support

def foo():
    print "hello"

if __name__ == "__main__":
    freeze_support()
    p = Process(target=foo)
    p.start()

果然..Windows無處不在都在挖坑....

歡迎各位大神指點(diǎn)交流, QQ討論群: 258498217
轉(zhuǎn)載請(qǐng)注明來源: https://segmentfault.com/a/11...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/44606.html

相關(guān)文章

  • python學(xué)習(xí)筆記 - fork, multiprocessing

    摘要:近年來,人工智能的興起使得更加火爆了。獲取當(dāng)前進(jìn)程父進(jìn)程的。但是唯一遺憾的是,函數(shù)只能在系統(tǒng)中使用,不能在系統(tǒng)中使用。因此在下,需要將其包含在中。則是立即返回一個(gè)可迭代對(duì)象。則是返回可迭代函數(shù)。 Python一直是一門對(duì)初學(xué)者非常友好的語言,在數(shù)據(jù)分析、Web 開發(fā)、網(wǎng)絡(luò)安全、網(wǎng)絡(luò)爬蟲等方面應(yīng)用廣泛。近年來,人工智能的興起使得 Python 更加火爆了。 我們?cè)谔幚泶罅繑?shù)據(jù)或者需要快速...

    littleGrow 評(píng)論0 收藏0
  • python大佬養(yǎng)成計(jì)劃-----多進(jìn)程

    摘要:多進(jìn)程執(zhí)行任務(wù)結(jié)束,創(chuàng)建進(jìn)程和銷毀進(jìn)程是時(shí)間的,如果長度不夠,會(huì)造成多線程快過多進(jìn)程多線程執(zhí)行任務(wù)結(jié)束,進(jìn)程間通信生產(chǎn)者消費(fèi)者模型與隊(duì)列演示了生產(chǎn)者和消費(fèi)者的場景。 進(jìn)程 Python是運(yùn)行在解釋器中的語言,查找資料知道,python中有一個(gè)全局鎖(GIL),在使用多進(jìn)程(Thread)的情況下,不能發(fā)揮多核的優(yōu)勢。而使用多進(jìn)程(Multiprocess),則可以發(fā)揮多核的優(yōu)勢真正地提...

    zhangfaliang 評(píng)論0 收藏0
  • Python學(xué)習(xí)】windows環(huán)境不能用函數(shù)

    摘要:普通的函數(shù)調(diào)用,調(diào)用一次,返回一次,但是調(diào)用一次,返回兩次,因?yàn)椴僮飨到y(tǒng)自動(dòng)把當(dāng)前進(jìn)程稱為父進(jìn)程復(fù)制了一份稱為子進(jìn)程,然后,分別在父進(jìn)程和子進(jìn)程內(nèi)返回。子進(jìn)程永遠(yuǎn)返回,而父進(jìn)程返回子進(jìn)程的。 一、Before Python學(xué)習(xí)過程中,經(jīng)常發(fā)現(xiàn)教程上講的函數(shù)在本機(jī)上會(huì)報(bào)錯(cuò): AttributeError: module object has no attribute *** 作為一個(gè)初學(xué)...

    googollee 評(píng)論0 收藏0
  • python大佬養(yǎng)成計(jì)劃----分布式進(jìn)程

    摘要:分布式進(jìn)程在和中,應(yīng)當(dāng)優(yōu)選,因?yàn)楦€(wěn)定,而且,可以分布到多臺(tái)機(jī)器上,而最多只能分布到同一臺(tái)機(jī)器的多個(gè)上。由于模塊封裝很好,不必了解網(wǎng)絡(luò)通信的細(xì)節(jié),就可以很容易地編寫分布式多進(jìn)程程序。 分布式進(jìn)程 在Thread和Process中,應(yīng)當(dāng)優(yōu)選Process,因?yàn)镻rocess更穩(wěn)定,而且,Process可以分布到多臺(tái)機(jī)器上,而Thread最多只能分布到同一臺(tái)機(jī)器的多個(gè)CPU上。 Pytho...

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

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

0條評(píng)論

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