python 多进程消息队列问题

from multiprocessing import Process, Queue

q = Queue()  # 创建消息队列

# 子进程
def handle():
   print(q.get())

#主进程
if __name__ == '__main__':
    p = Process(target=handle)
    p.start()
    cmd = input("请输入选择\n")
    q.put(cmd)

为什么主进程写入消息队列的数据,子进程读不出来呢?

进程间使用队列通讯时,队列应作为进程函数的参数传递进去。另外,子进程通常要设置进程守护。

from multiprocessing import Process, Queue

q = Queue()  # 创建消息队列

def handle(q):
   print('Start...')
   print(q.get())
   print('Over.')

if __name__ == '__main__':
    p = Process(target=handle, args=(q, ))
    p.daemon = True # 设置进程守护
    p.start()
    cmd = input("请输入选择\n")
    print(q.empty())
    q.put(cmd)
    print(q.empty())
    
    input() # 利用该函数阻塞主进程以守护子进程,是我在测试时的习惯做法