python 中的生产者消费者锁定 get

Producer consumer in python locks on get

我正在努力在 Python3 中创建生产者消费者队列。我无法唤醒我的消费者:

from multiprocessing import Process, Queue
import time
def consumer(q):
        while(True):
            data=q.get()
            if (data[0]==False):
                print("Killing")
                return
            print((data[1]))
            time.sleep(1)

maxitems=3
q = Queue(maxitems)
p = Process(target=consumer, args=(q,))
p.start()
for idx in range(0,10):
    q.put((True,idx))
    #Where idx would normally be a chunk of data
p.put((False,False))
p.join()

输出:

0

然后锁定...

当我向消费者线程推送数据时,如何唤醒消费者线程?

发布:

python3.3 tryit.py

构建于:

[ebuild   R    ] dev-lang/python-3.3.5-r1:3.3::gentoo  USE="gdbm ipv6 ncurses readline ssl threads xml -build -doc -examples -hardened -sqlite -tk -wininst" 0 KiB

p.put((False,False))是错误的和一些不惯用的Python,否则就可以了。

from multiprocessing import Process, Queue
import time

def consumer(q):
        while True:
            data=q.get()
            if data[0]==False:
                print("Killing")
                break
            print(data[1])
            time.sleep(1)

maxitems=3
q = Queue(maxitems)
p = Process(target=consumer, args=(q,))
p.start()
for idx in range(0,10):
    q.put((True,idx))
    #Where idx would normally be a chunk of data
q.put((False,False))
p.join()                                                                                                               

不知何故,这需要 运行 来自 main

from multiprocessing import Process, Queue
import time
def consumer(q):
         while(True):
            data=q.get()
            if (data[0]==False):
                print("Killing")
                return
            print((data[1]))
            time.sleep(1)

if __name__ == '__main__':
    maxitems=3
    q = Queue(maxitems)
    p = Process(target=consumer, args=(q,))
    p.start()
    for idx in range(0,10):
        q.put((True,idx))
        #Where idx would normally be a chunk of data
    q.put((False,False))
    p.join()