我正在尝试构建一个侦听队列(Redis Kombu)的Python守护程序。 抓住任务并生成一个greenthread来处理这个任务。
我可以毫无困难地接收任务并使用它,但是当我尝试使用eventlet生成GreenThread时,它似乎根本没有做任何事情。
没有打印,没有显示记录。
class agent(Daemon):
"""
Agent
"""
def run(self):
# Setup connection
mainLogger.debug('Connecting to Redis')
connection = BrokerConnection(
hostname=agentConfig['redis_host'],
transport="redis",
virtual_host=agentConfig['redis_db'],
port=int(agentConfig['redis_port']))
connection.connect()
# Create an eventlet pool of size 5
pool = eventlet.GreenPool(5)
q = connection.SimpleQueue("myq")
while True:
try:
message = q.get(block=True, timeout=1)
print "GOT A MESSAGE FROM Q !"
pool.spawn_n(self.foo, 'x')
print "END SPAWN !"
except Empty:
mainLogger.debug('No tasks, going to sleep')
time.sleep(1)
def foo(self, x):
mainLogger.debug('\o/')
print "HELLO FROM SPAWN"
我做错了什么?
答案 0 :(得分:3)
我需要调用eventlet.monkey_patch()进行sleep()调用以触发上下文切换。
答案 1 :(得分:2)
您只需使用此处所述的eventlet.sleep
: