celery执行成功存mysql_如何使用MySQL的datetime在Celery中执行任务?

新闻存储在数据库

MySQL中,具有发布日期时间.

任何时候用户都可以在表中添加新的延迟日期发布.

如何使用Celery来监听数据库表并检查是否该发布数据?

对于发布数据负责另一个进程(脚本Python).所以Celery应该根据datetime为MySQL表中的每一行调用这个脚本.

如何使用芹菜?

我认为创建具有日期和发布ID的队列的另一种方法是直接在此队列中添加用户表单中的数据.因此sholud是进程(Celery),它按日期观察队列以进一步执行任务.

Celery提供了定期任务和计划任务的文档,但没有解释和示例如何使用它.

对不起,如果问题很简单,我是Python Celery的新手.

eta参数必须采用日期时间格式,因此它将以精确的毫秒精度运行.

我建议您使用ORM,因此数据库中的日期时间数据类型将由ORM自动转换:D

假设我们有一个文章模型:

class Article(models.Model):

title = models.CharField(max_length=100)

published = models.BooleanField(default=False)

created_date = models.DateTimeField()

然后我们的任务模块:

@app.task(bind=True)

def set_published(*args, **kwargs):

article = Article.objects.get(id=args[1])

article.published = True

article.save()

print("article %d has been published" % args[1])

保存新文章并使用ETA 1分钟调用set_published

article = Article(title='This is a new article', published=False, created_date=datetime.utcnow())

article.save()

delta = timedelta(minutes=1)

set_published.apply_async(args=(article.id,), eta=article.created_date + delta)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值