感觉这里的锁去掉也没有问题
def poll_queue(conn):
while not QUIT:
//获取队列中第一个任务
item = conn.zrange('delayed:',0,0,withscores=True)
//队列中内有包含任务或者任务的执行时间未到
if not item or item[0][1] > time.time():
time.sleep(.01)
continue
//解码要被执行的任务,弄清楚它应该被推入哪个任务队列里面
item = item[0][0]
//identifier:任务标识符
//queue:任务将要被添加到的队列的名字
//function:回调函数
//args:参数
identifier,queue,function,args = json.loads(item)
//获取锁
locked = acquire_lock(conn,identifier)
if not locked:
continue
//把任务从延时队中移除,并添加到 特定的队列中 执行
if conn.zrem('delayed:',item):
conn.rpush('queue:' + queue,item)
//释放锁
release_lock(conn,identifier,locked)
if conn.zrem('delayed:',item):
conn.rpush('queue:' + queue,item)
假如多线程的情况下,上面的删除与添加操作如果不加锁,会有什么bug?