小結(jié)Python用fork來創(chuàng)建子進程注意事項
自己隨手寫了Python下 fork 進程的測試代碼(來說明這個問題不一定完全合適):
def fork(a): def now(): import datetime return datetime.datetime.now().strftime("%S.%f") import os import time print now(), a if os.fork() == 0: print '子進程[%s]:%s' % (now(), os.getpid()) while 1: a-=10 print '子進程的a值[%s]:%s' % (now(), a) if a < 1: break print '準備退出子進程' #os._exit(0) ## 你可以在這里退出子進程 else: print '父進程[%s]:%s' % (now(), os.getpid()) while 1: a-=1 print '父進程的a值[%s]:%s' % (now(), a) if a < 0: break time.sleep(1) print '等待子進程結(jié)束...' try: result = os.wait() if result: print '子進程:', result[0], result[1] else: print '沒有數(shù)據(jù)!' except: print '異常哦...' print '父進程...' print '最后的值:',a #exit(0) ## 你也可以在這里退出,注意,這里是父進程和子進程都共用的地方,在這里退出會導致父進程也一并退出
TIPS:
os.fork() 會有兩次返回值,分別是父進程和子進程的返回值
在父進程中,fork返回的值是子進程的PID;
子進程中,這個返回值為0
子進程會復制父進程的上下文
父子進程并不能確定執(zhí)行順序
os.fork() 之后,子進程一定要使用 exit() 或者 os._exit() 來退出子進程環(huán)境,建議使用 os._exit()
os.fork() 來創(chuàng)建子進程的這個代碼并不是很通適,Linux是沒問題的,在Windows下就是不能用的,而官方文檔也有類似表述:
Note that some platforms including FreeBSD <= 6.3, Cygwin and OS/2 EMX have known issues when using fork() from a thread Availability: Unix.
相關文章
Python Flask基礎到登錄功能的實現(xiàn)代碼
這篇文章主要介紹了Python Flask基礎到登錄功能的實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05詳解js文件通過python訪問數(shù)據(jù)庫方法
在本篇內(nèi)容里小編給大家分享了關于js文件通過python訪問數(shù)據(jù)庫方法和技巧,有需要的朋友們跟著學習參考下。2019-03-03