0

我正在使用Python 2.7, beanstalkd serverwith beanstalkc作为客户端库。

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

我有一份cron工作将继续向 beanstalkd 队列添加工作,还有一个“工人”将在无限循环中运行,获取工作并处理它们。

例如:

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"异常。

这是从队列中拉出作业的最佳做法吗?

有人可以帮我吗?

4

1 回答 1

4

调用beanstalk.reserve(timeout=0)意味着等待 0 秒让作业变得可用,因此它会立即超时,除非作业在被调用时已经在队列中。如果您希望它永远不会超时,请使用timeout=None(或省略 timeout 参数,因为None它是默认值)。

于 2012-07-19T22:57:07.300 回答