现在有这样一个需求,
我要从redis的key里面取东西,但是这些key是不定的(命名有一定规则), 我现在的想法是通过一个协程没一秒去扫描存活的key, 存入AsyncResult里面, 然后在其他协程里面使用这些key之前先从这个AsyncResult里面取值。这样有个问题, 如果在协程运行起来后, 新加入了key, 下面的代码不能捕获到新的key了, 求解。
import gevent, redis
alive_keys = gevent.event.AsyncResult()
def get_alive_keys():
----client = redis.StrictRedis(host='localhost')
----while 1:
--------try:
------------keys = client.keys('alive*balabala*')
------------alive_keys.set(keys)
--------except:
------------pass
--------gevent.sleep(1)
def foo(key):
----balabala....
try:
----keys = alive_keys.get()
----tasks = [gevent.spawn(foo, key) for key in keys]
----tasks.append(gevent.spawn(get_alive_keys))
----gevent.joinall(tasks)
except:
----pass
我要从redis的key里面取东西,但是这些key是不定的(命名有一定规则), 我现在的想法是通过一个协程没一秒去扫描存活的key, 存入AsyncResult里面, 然后在其他协程里面使用这些key之前先从这个AsyncResult里面取值。这样有个问题, 如果在协程运行起来后, 新加入了key, 下面的代码不能捕获到新的key了, 求解。
import gevent, redis
alive_keys = gevent.event.AsyncResult()
def get_alive_keys():
----client = redis.StrictRedis(host='localhost')
----while 1:
--------try:
------------keys = client.keys('alive*balabala*')
------------alive_keys.set(keys)
--------except:
------------pass
--------gevent.sleep(1)
def foo(key):
----balabala....
try:
----keys = alive_keys.get()
----tasks = [gevent.spawn(foo, key) for key in keys]
----tasks.append(gevent.spawn(get_alive_keys))
----gevent.joinall(tasks)
except:
----pass
