Beanstalkd生产以及消费

生产者代码

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命令扔回工作队列中,之后就能被消费了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值