生产者代码
import greenstalk
with greenstalk.Client(host='10.255.175.79',port = 11300) as queue:
num = 0
while True:
num +=1
text = "第%s个消息"%num
queue.use('t3') #生产者选择tube
queue.put(text)#向tube内打数据
print(text)
queue.use('t4')#可以再选择一个tube
queue.put(text*10)#再次打数据
print(text*10)
if num > 20:
break
消费者代码
import greenstalk
with greenstalk.Client(host='10.255.175.79',port = 11300) as queue:
print(queue.using()) #打印当前tube
print(queue.stats_tube('t3')) #打印当前tube的信息状态
queue.watch('t3') #选择消费哪个tube
#queue.watch('t4')
#queue.use('t3')
while True:
job = queue.reserve() #此时表示已被消费
job_id = job.id #任务的id
job_body = job.body #任务的信息体
print(job_id,job_body)
queue.delete(job_id) #消费完了正常就应该删除掉(可以选择不删除)
设想利用beanstalkd的队列特性,加快新日志的处理,避免在重复日志上浪费太多时间
API参考
queue = greenstalk.Client(host =‘127.0.0.1’,port = 11300,encoding =‘utf-8’,use =‘default’,watch =‘default’ )
queue.close()
关闭beanstalkd连接,调用后此实例不可再用
quque.put(body,priority = 65536,delay = 0,ttr = 60)
body 信息体
delay(int) 延迟的时间(s)
priority 优先级,数值越大优先级越低
ttr put超时时间
将job插入当前使用的tube中(默认default)
返回值:None
queue.use(tube)
选择想要使用的tube(注意这里是生产者使用的方法)
返回值:None
queue.reserve(timeout = None)
消费队列的job,timeout代表超时时间,默认60s,超过后会抛timeout异常
返回值:job(在tube中取出的job)
queue.delete(job)
删除job(一般在reserve后删除job)
一旦delete就再也无法再次消费了
queue.release(job,priority = 1 ,delay = 0)
恢复一个被reserve的job,可以再次入队插队设置延迟(相当于再轮循一次)
queue.bury(job,priority = 1)
bury命令将job放到一个特殊的FIFO队列中,之后不能被reserve命令获取,但可以用kick命令扔回工作队列中,之后就能被消费了