標籤:parent win linux unix 識別 linu start roc style
先介紹怎麼用,然後說明Python的多進程/多線程。
Linux和Unix作業系統提供了一個稱為fork()的系統調用,普通的函數調用一次返回一次,該函數調用一次返回兩次,(也算實現了從1到2的突破)因為作業系統把當前進程(父進程)複製了一份(子進程)然後在子進程和父進程內返回,子進程永遠返回0,二父進程返回子進程的ID,這樣當建立很多子進程的時候,父進程多能一一記住自己兒子的識別碼。而子進程只需要調用getppid()就可以得到自己父進程的識別碼了。 當時就是因為Windows下沒有fork這個東西我才轉到linux下的,然後就一去不複返了。。。。
正如大家所致Python的os模組封裝了常見的系統調用,其中就有fork,可以再Python中輕鬆的建立子進程:
import osprint(‘Process (%s) start...‘ % os.getpid())# Only works on Unix/Linux/Mac:pid = os.fork()if pid == 0: print(‘I am child process (%s) and my parent is %s.‘ % (os.getpid(), os.getppid()))else: print(‘I (%s) just created a child process (%s).‘ % (os.getpid(), pid))
Process (13190) start...I (13190) just created a child process (13191).I am child process (13191) and my parent is 13190.
multiprocessing
如果打算編寫多線程的服務程式,Linux系統很方便,但是難道在windows下就沒辦法使用了嗎? 由於Python是跨平台語言,自然也應該提供了一跨平台的多進程支援,multiprocessing模組就是跨平台版本的多進程模組。multiprocessing提供了一個Process類來代表一個進程對象,下面的例子示範了啟動一個子進程並等待其結束。
Python多進程(multiprocessing)