Python个人代码库-beanstalkd操作类

本文介绍了一个使用Python实现的Beanstalkd队列管理类,包括队列的基本操作如发送消息、接收消息、删除消息等,并提供了判断队列是否为空的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/usr/bin/python 
# -*- coding:UTF-8 -*-
import beanstalkc
import pickle
import time

class BSQueueC(object):
    def __init__(self, host, port=11300):
        self.host = host
        self.port = port 
        self.__conn = beanstalkc.Connection(host, port)
        
    def __del__(self):
        self.__conn.close()
        
    def put(self, tube, body, priority=2 ** 31, delay=0, ttr=120):
        self.__conn.use(tube)
        return self.__conn.put(body, priority, delay, ttr)
        
    def put_dict(self, tube, dic, priority=2 ** 31, delay=0, ttr=120):
        self.__conn.use(tube)
        return self.__conn.put(body=pickle.dumps(dic), priority, delay, ttr)
    
    def reserve(self, tube, timeout=0):
        for t in self.__conn.watching():
            self.__conn.ignore(t)
        self.__conn.watch(tube)
        return self.__conn.reserve(timeout)

    def clear(self, tube):
        while 1:
            job = self.reserve(tube, 1)
            if job is None:
                break
            else:
                job.delete()
        
    def is_empty(self, tube):
        dic_stats = self.__conn.stats_tube(tube)
        ready_job = dict_stats['current-jobs-ready']
        reserver_job = dict_stats['current-jobs-reserved']
        if (ready_job == 0) and (reserver_job == 0):
            return True
        else:
            return False
        
    def clear(self, tube):
        try:
            while 1:
                job = self.reserve(tube, 1)
                if job is None:
                    break
                else:
                    job.delete()
        except Exception, e:
            print e          
        
    def watch_tubes(self, lis_tubes):
        for t in self.__conn.watching():
            self.__conn.ignore(t)
        for tube in lis_tubes:
            self.__conn.watch(tube.strip())
        
    def kick_all_jobs(self, lis_tubes):
        for t in lis_tubes:
            self.__conn.use(t.strip())
            self.__conn.kick()
            
    def reserve_from_tubes(self, timeout=120):
        return self.__conn.reserve(timeout)
            
        
        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值