从beanstalkd获取工作 - 超时异常

时间:2012-07-19 18:53:14

标签: python timeout jobs beanstalkd beanstalkc

感谢阅读。

我使用Python 2.7beanstalkd serverbeanstalkc作为客户端库。

处理每个作业大约需要500到1500毫秒,具体取决于作业的大小。

我有一个cron作业,它将继续向beanstalkd队列添加作业,以及一个将在无限循环中运行以获取作业并处理它们的“worker”。

例如:


def get_job(self):
    while True:
        job = self.beanstalk.reserve(timeout=0)
        if job is None:
            timeout = 10 #seconds
            continue
        else:
            timeout = 0 #seconds
            self.process_job(job)

这导致"timed out"例外。

这是从队列中提取作业的最佳做法吗?

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

调用beanstalk.reserve(timeout=0)表示等待0秒才能使作业可用, 所以除非工作已经完成,否则它会立即超时 在它被调用的队列中。如果你想要它永远不会超时, 使用timeout=None(或省略timeout参数,因为None是默认值)。