我在项目中使用了 receiver 来监测 django models(mysql)的 post_save 信号, 这个 receiver 发送一个异步任务至 celery,异步任务写入数据至 redis,最后由一个脚本取出数据来进行统计任务。
receiver 的写法如下:
@
receiver(post_save, sender=test_models)
def record_processor(sender, instance, **kwargs):
tasks.test_task.apply_async(args=[
instance.id])
异步任务(celery)如下:
@
app.task(bind=True)
def record_test(self, test_models_id):
try:
test = test_models.objects.get(id=test_models_id)
except:
return
date = datetime.now().date()
key2 = "{0}:{1}".format(date, "test_num")
pipe = r.pipeline()
pipe.incr(key2)
pipe.expire(key2, expired_time)
pipe.execute()
但在整个项目工作过程中,只有约十分之一的数据发送到了 redis 中——异步任务没有报错提醒。我不确定是哪个环节出了问题(从经验来看似乎 django 中 sql 的 singal 发送会有些不够稳定),想询问一下可能的原因以及解决的方案
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/364520
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.