首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在django模型信号上创建beanstalkd作业

在django模型信号上创建beanstalkd作业
EN

Stack Overflow用户
提问于 2016-11-29 10:39:04
回答 1查看 83关注 0票数 0

我希望在保存django模型时创建beanstalkd作业。为此,我正在侦听模型的post_save信号,相关处理程序正在创建一个beanstalkd作业,如下所示(在myapp/signals.py中):

代码语言:javascript
复制
@receiver(post_save, sender=MyModel)
def create_job(sender, **kwargs):
    beanstalk = beanstalkc.Connection(
        host='example.com',
        port=11300
    )
    beanstalk.use('test')
    beanstalk.puts('job');

然而,我不喜欢这样的事实,我正在创建一个新的连接,每次我收到一个信号。我的问题是:

  1. 如果我连接到函数外部的beanstalkd,在模块的顶部,然后重新使用连接,这会更好吗?
  2. 但是,如果我重复使用连接,连接由于某些原因中断,整个过程就会受到影响,对吗?那么,有什么更好的解决方案呢?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-30 08:31:01

最后,我遵循了这种方法:

我在公共/util/beanstalkd_client.py中创建了一个类:

代码语言:javascript
复制
from django.conf import settings
import beanstalkc


class _BeanstalkdClient:
    def __init__(self):
        self.beanstalk = beanstalkc.Connection(
            host=settings.BEANSTALKD.get('host'),
            port=int(settings.BEANSTALKD.get('port'))
        )

        self.job = None

    def watch(self, tube, ignore_default=True):
        self.beanstalk.watch(tube)

        if ignore_default:
            self.beanstalk.ignore('default')

    def use(self, tube):
        self.beanstalk.use(tube)

    def reserve(self):
        self.job = self.beanstalk.reserve()
        return self.job

    def put(self, payload):
        self.beanstalk.put(payload)


beanstalkd_client = _BeanstalkdClient()

这允许我重用beanstalkd_client并处理内部的连接。因为python总是要创建一个模块的实例,所以beanstalkd_client模块总是有一个到beanstalkd的连接。

然后在我的signals.py中:

代码语言:javascript
复制
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
from django.conf import settings

from common.util.beanstalkd_client import beanstalkd_client

beanstalkd_client.use(settings.BEANSTALKD.get('my_tube_name'))


@receiver(post_save, sender=Address)
def es_create_index(sender, **kwargs):
    beanstalkd_client.put('my awesome job!')

然而,这仍然不能处理第二点:如果连接到beanstalkd是坏的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40863699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档