gevent socket同步错误?

时间:2016-03-17 05:32:38

标签: python sockets queue block gevent

这是我的代码

from gevent import socket
import gevent
from gevent.queue import Queue


tasks = Queue()

def worker(name):
    while not tasks.empty():
        task = tasks.get() # decrements queue size by 1'
        print('Worker %s got task %s' % (name, task))
        addr = socket.gethostbyname('http://www.nxxc.net/opkyfx.html')
        gevent.sleep(0)

    print('Quitting time!')

def boss():
    """
    Boss will wait to hand out work until a individual worker is
    free since the maxsize of the task queue is 3.
    """

    for i in xrange(1,10):
        tasks.put(i)
    print('Assigned all work in iteration 1')

boss()
print len(tasks)
gevent.joinall([
    gevent.spawn(worker, 'steve'),
    gevent.spawn(worker, 'john'),
    gevent.spawn(worker, 'bob'),
])
print tasks.empty()

,输出

Assigned all work in iteration 1
9
Worker steve got task 1
Worker john got task 2
Worker bob got task 3
False

由于代码中的第9行,它应该在输出的最后一行中出现True。输出中应该有比6更多的行。 结果应类似于以下结果。

Assigned all work in iteration 1
9
Worker steve got task 1
Worker john got task 2
Worker bob got task 3
Worker steve got task 4
Worker john got task 5
Worker bob got task 6
Worker steve got task 7
Worker john got task 8
Worker bob got task 9
Quitting time!
Quitting time!
Quitting time!
True

删除第12行时发生上述结果。 为什么会这样? 帮帮我gevent专家!! 请解释!!

0 个答案:

没有答案