在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python/ 為什么apply_async并沒(méi)有啟動(dòng)任務(wù)

為什么apply_async并沒(méi)有啟動(dòng)任務(wù)

為什么如下代碼的打印為

end

代碼如下:

#-*- coding=utf-8 -*-
import os,time,random
from multiprocessing import Process,Pool,Queue

def pidprint(st):
    print("pid(%s):"%os.getpid(),st)


def write(q):
    pidprint("start write")
    while True:
        q.put(time.strftime("%H:%M:%s",time.localtime()))
        time.sleep(1)

def read(q):
    pidprint("start read")
    while True:
        pidprint(q.get(True))

if __name__ == '__main__':
    q = Queue()
    p = Pool(2)
    p.apply_async(read,args=(q,))
    p.apply_async(write,args=(q,))
    time.sleep(1)
    p.close()
    p.join()
    print('end')
回答
編輯回答
貓館

隊(duì)列Queue不能直接創(chuàng)建,而需要從Manager獲得, 這樣才能在子進(jìn)程里共享

#-*- coding=utf-8 -*-
import os,time,random
from multiprocessing import Process,Pool,Queue,Manager

def pidprint(st):
    print("pid(%s): %s" % (os.getpid() , st))


def write(q):
    pidprint("start write")
    while True:
        q.put(time.strftime("%H:%M:%s",time.localtime()))
        time.sleep(1)

def read(q):
    pidprint("start read")
    while True:
        pidprint(q.get(True))

if __name__ == '__main__':
    manager = Manager()
    q = manager.Queue()
    p = Pool(2)
    p.apply_async(read,args=(q,))
    p.apply_async(write,args=(q,))
    time.sleep(2)

    p.close()
    p.join()


    print('end')

程序會(huì)輸出

pid(32157): start read
pid(32158): start write
pid(32157): 21:55:1516974937
pid(32157): 21:55:1516974938
pid(32157): 21:55:1516974939
......

2017年9月30日 18:10