摘要:普通的函數(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é)者,就會(huì)很懵逼的檢查: 1、有沒有寫錯(cuò)函數(shù)名;2、是不是忘記引用這個(gè)函數(shù)了?3、檢查下這個(gè)插件模塊是否安裝了?...(如果你很認(rèn)同,就說明你找對(duì)地方了)
本篇文章將為大家介紹學(xué)習(xí)Python過程中windows環(huán)境的“坑”。
二、正文由于和操作系統(tǒng)相關(guān),所以這些“坑”來源于Python中的os模塊~~~
1、os.uname()python提供了查看當(dāng)前操作系統(tǒng)的函數(shù):
os.name() #output: #nt--Windows系統(tǒng) #posix--Linux、Unix或Mac OS X
python還提供了一個(gè)查看操作系統(tǒng)詳細(xì)信息的函數(shù),就是os.uname(),在mac環(huán)境下執(zhí)行輸出如下結(jié)果。
os.uname() #output:(sysname, nodename, release, version, machine) #("Darwin", "iMac.local", "13.3.0", "Darwin Kernel Version 13.3.0: Tue Jun 3 21:27:35 PDT 2014; root:xnu-2422.110.17~1/RELEASE_X86_64", "x86_64")
但是在windows上,就會(huì)報(bào)錯(cuò)沒有這個(gè)模塊。
解決方案:
(1)獲取hostname:socket.gethostname() 或 socket.gethostbyaddr(socket.gethostname())
(2)使用platform.uname()
import platform print platform.uname() #output: #(system="Windows", node="hongjie-PC",release="7", version="6.1.7601", machine="x86", processor="x86 Family 16 Model 6 Stepping 3, AuthenticAMD")2、os.fork()
os.fork() #新建進(jìn)程 #output:pid
Unix/Linux操作系統(tǒng)提供了一個(gè)fork()系統(tǒng)調(diào)用,它非常特殊。普通的函數(shù)調(diào)用,調(diào)用一次,返回一次,但是fork()調(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)返回0,而父進(jìn)程返回子進(jìn)程的ID。這樣做的理由是,一個(gè)父進(jìn)程可以fork出很多子進(jìn)程,所以,父進(jìn)程要記下每個(gè)子進(jìn)程的ID,而子進(jìn)程只需要調(diào)用getppid()就可以拿到父進(jìn)程的ID。
解決方案:
1、使用Python的multiprocessing模塊的Process來創(chuàng)建進(jìn)程
import multiprocessing import os def runChildProcess(name): print "Run Child Process,pname = {} , pid = {}".format(name,os.getpid()) if __name__ == "__main__": print "Run Parent Process,pid = {}".format(os.getpid()) child = multiprocessing.Process(target=runChildProcess,args=("test",)) print "+"*20 child.start() child.join() print "-"*20
執(zhí)行結(jié)果: Run Parent Process,pid = 5540 ++++++++++++++++++++ Run Child Process,pname = test , pid = 712 --------------------三、After
本文持續(xù)更新...
如果有錯(cuò)誤、或建議,請(qǐng)務(wù)必聯(lián)系我,我會(huì)在看到消息后的第一時(shí)間改進(jìn)?。?!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/40715.html
摘要:且本小白也親身經(jīng)歷了整個(gè)從小白到爬蟲初入門的過程,因此就斗膽在上開一個(gè)欄目,以我的圖片爬蟲全實(shí)現(xiàn)過程為例,以期用更簡單清晰詳盡的方式來幫助更多小白應(yīng)對(duì)更大多數(shù)的爬蟲實(shí)際問題。 前言: 一個(gè)月前,博主在學(xué)過python(一年前)、會(huì)一點(diǎn)網(wǎng)絡(luò)(能按F12)的情況下,憑著熱血和興趣,開始了pyth...
摘要:所以我們需要將打包成模塊提供給進(jìn)行調(diào)用。安裝完之后我們執(zhí)行,新建一個(gè)項(xiàng)目。需要注意的是編譯的版本需要與運(yùn)行的版本一致,否則會(huì)出現(xiàn)無法調(diào)用的情況。 前言 近段時(shí)間學(xué)習(xí)了Rust,一直想著做點(diǎn)什么東西深入學(xué)習(xí),因?yàn)槭莿倢W(xué)習(xí),很多地方都不熟悉,所以也就不能拿它來做編譯器這些,至于web開發(fā),實(shí)際上我并不建議拿這個(gè)來學(xué)習(xí)一門語言,大概有幾個(gè)方面,一是web開發(fā)的套路無非也就那么幾個(gè),對(duì)學(xué)習(xí)一門...
摘要:算了算了,不整游戲了,反正你們也不愛看今天來試試把頭條上扭腰上熱門的那些妹子爬一爬,不知道我頂不頂?shù)米《?zhǔn)備工作使用的環(huán)境專業(yè)版要用的第三方模塊三大致流程鑒于你們不喜歡我啰嗦,但是流程呢,我還是要給你們寫出來,所以我就單獨(dú)把它列出來了。 ...
閱讀 961·2023-04-26 01:37
閱讀 3433·2021-09-02 15:40
閱讀 1050·2021-09-01 10:29
閱讀 2966·2019-08-29 17:05
閱讀 3471·2019-08-28 18:02
閱讀 1238·2019-08-28 18:00
閱讀 1536·2019-08-26 11:00
閱讀 2694·2019-08-26 10:27