守護進程

守護進程

會隨着主進程的結束而結束。json

主進程建立守護進程小程序

  其一:守護進程會在主進程代碼執行結束後就終止網絡

  其二:守護進程內沒法再開啓子進程,不然拋出異常:code

'''
守護進程
守護--》伴隨
本質也是一個子進程
主進程的代碼執行完畢守護進程直接結束。
'''
from multiprocessing import Process
import time
def foo():
    print('守護進程 start')
    time.sleep(5)
    print('守護進程 end')
if __name__ == '__main__':

    p = Process(target=foo)
    p.daemon = True#必定要在p.start()前設置,設置p爲守護進程,禁止p建立子進程,而且父進程代碼執行結束,p即終止運行
    p.start()
    time.sleep(2)# 把這個子進程定義爲了守護進程
    print('主進程')
#############
守護進程 start
主進程
from multiprocessing import Process
import time


def foo():
    print('守護進程 start')
    time.sleep(3)
    print('守護進程 end')


def task():
    print('process start')
    time.sleep(5)
    print('process end')


if __name__ == '__main__':
    p = Process(target=foo)
    p2 = Process(target=task)
    p.daemon = True
    p.start()
    p2.start()
    time.sleep(1)
    print('主進程')
    
################
守護進程 start
process start
主進程
process end

搶票小程序

#db.txt
{"count": 10}
from multiprocessing import Process
import json
import os
import time


def search():
    time.sleep(1)  ##模擬網絡IO
    with open('db.txt', mode='rt', encoding='utf8') as f:
        res = json.load(f)
        print(f'還剩餘{res["count"]}')


def get():
    with open('db.txt', 'rt', encoding='utf8') as f:
        res = json.load(f)
    time.sleep(1)
    if res['count'] > 0:
        res['count'] -= 1
        with open('db.txt', 'wt', encoding='utf8') as f:
            json.dump(res, f)
            time.sleep(1.5)
            print(f'進程{os.getpid()}搶票成功')
    else:
        print("票已經成功售空!!!")


def task():
    search()
    get()


if __name__ == '__main__':
    for i in range(15):
        p = Process(target=task)
        p.start()
        p.join()
################
還剩餘10
進程17808搶票成功
還剩餘9
進程17504搶票成功
還剩餘8
進程18052搶票成功
還剩餘7
進程17620搶票成功
還剩餘6
進程5480搶票成功
還剩餘5
進程9372搶票成功
還剩餘4
進程18108搶票成功
還剩餘3
進程15816搶票成功
還剩餘2
進程4644搶票成功
還剩餘1
進程18044搶票成功
還剩餘0
票已經成功售空!!!
還剩餘0
票已經成功售空!!!
還剩餘0
票已經成功售空!!!
還剩餘0
票已經成功售空!!!
還剩餘0
票已經成功售空!!!
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息