• <table id="4yyaw"><kbd id="4yyaw"></kbd></table>
  • <td id="4yyaw"></td>
  • 發布時間:2020-10-05 19:01 原文鏈接: python修煉day31(二)

    Process語法結構如下:

    Process([group[,target[,name[,args][,kwargs]]]])

    target:如果傳遞了函數的引用,可以認為這個子程序就執行這里的代碼

    args:給target指定的函數傳遞的參數,已元組的方式傳遞

    kwargs:給target指定的函數傳遞命名參數,字典

    name:給進程設定一個名字,可以不設定

    group:指定進程組,大多數情況用不到

    Process創建的實例對象的常用方法:

    start():啟動子進程實例(創建子進程)

    is_alive():判斷進程子進程是否還在活著

    join([timeout]):是否等待子進程執行完畢,或者等待多少秒

    terminate:不管任務是否完成,立即終止子進程

    Process創建的實例對象的常用屬性:

    name:當前進程的別名,默認為Process-N,N為從1開始遞增的整數

    pid:當前進程的pid(進程號)ppid(父進程號)

    """

    #指定一個全局變量

    nums=[1,2,3,4]

    deftest():

    nums.append(5)

    print("--在test中nums=%s"%nums)

    time.sleep(3)

    deftest2():

    print("--在test2中nums=%s"%nums)

    defmain():

    print("主程序進程是%s,主程序父進程是%s"%(os.getpid(),os.getppid()))

    #創建進程

    p=multiprocessing.Process(target=test)

    p.start()#啟動進程

    p.join(1)#等待子進程執行完畢,可以指定等待的時間

    p2=multiprocessing.Process(target=test2)

    p2.start()

    if__name__=='__main__':

    main()

    多進程之間通過Queue隊列來共享數據

    importmultiprocessing

    """

    一個進程向隊列Queue寫入數據,另一個進程從隊列中獲取數據

    Queue.put():向隊列中寫入數據

    Queue.qsize():返回當前隊列包含的消息數量

    Queue.empty():如果隊列為空,返回True,反之返回False

    Queue.full():如果隊列滿了,返回True,反之False

    Queue.get([block[,timeout]]):獲取隊列中的一條消息,然后將其從隊列中移除

    """

    deftest1(q):

    """下載數據"""

    #模擬從網上下載數據

    data=[1,2,3,4]

    fortempindata:

    q.put(temp)#寫入數據

    print("下載完畢并存入隊列中")

    deftest2(q):

    """解析數據"""

    dw_data=[]

    whileTrue:

    data=q.get()#取出并移除數據

    dw_data.append(data)

    ifq.empty():#如果隊列為空,就退出循環

    break

    print(dw_data)

    print("數據分析完畢")

    defmain():

    #創建隊列

    q=multiprocessing.Queue()

    #創建進程

    p1=multiprocessing.Process(target=test1,args=(q,))

    p2=multiprocessing.Process(target=test2,args=(q,))

    p1.start()

    p2.start()

    if__name__=='__main__':

    main()

    進程池

    frommultiprocessingimportPool

    importtime

    importos

    importrandom

    deftest(i):

    t_start=time.time()#記錄程序開始的時間

    print("%s開始執行,進程號是%d"%(i,os.getpid()))

    time.sleep(random.random()*2)#random.random會隨機生成0-1之間的浮點數

    t_end=time.time()#記錄程序結束的時間

    print("%s執行完畢,用時%.2f秒"%(i,(t_end-t_start)))

    if__name__=='__main__':

    try:

    po=Pool(3)#定義一個進程池,最大進程數為3

    foriinrange(0,10):

    #pool().apply_async(要調用的目標,(傳遞給目標的參數元組,))

    #每次循環都將會用空閑出來的子進程去調用目標

    po.apply_async(test,(i,))

    print("開始")

    po.close()#關閉進程池,關閉后po不在接收新的請求

    po.join()#等待po進程池中所有子進程執行完畢,必須放在close語句之后

    print("結束")

    exceptExceptionasresult:

    print(result)


  • <table id="4yyaw"><kbd id="4yyaw"></kbd></table>
  • <td id="4yyaw"></td>
  • 调性视频