cunfused why gevent block redis' socket request?

Tony Shao xiocode at gmail.com
Fri Dec 28 22:46:28 EST 2012


GOAL:spawn a few greenlet worker deal with the data pop from redis (pop from redis and then put into queue)

RUNNING ENV: ubuntu 12.04
PYTHON VER: 2.7
GEVENT VER: 1.0 RC2
REDIS VER:2.6.5
REDIS-PY VER:2.7.1

from gevent import monkey; monkey.patch_all()
import gevent
from gevent.pool import Group
from gevent.queue import JoinableQueue
import redis

tasks = JoinableQueue()
task_group = Group()

def crawler():
    while True:
        if not tasks.empty():
            print tasks.get()
            gevent.sleep()

task_group.spawn(crawler)
redis_client = redis.Redis()
data = redis_client.lpop('test') #<----------Block here
tasks.put(data)


Try to pop data from redis, but it blocked..and no exception raised...just freeze
and remove spawn method ,it will worked..
i feel confuse what happened, plz help!
thk u!



More information about the Python-list mailing list