Djando芹菜:芹菜任务不会在DB中创建记录



我想使用芹菜任务创建数据库记录。但是由于某种原因,object.save()方法不使用task.apply_async()(应用任务异步)。

相同的记录(tricker)在本地运行时,用芹菜任务保存在数据库中:

get_all_tickers.apply()

,但没有通过异步模式保存:

get_all_tickers.apply_async()

在两种情况下,插入语句在服务器日志中都可以看到。

models.py

class Ticker(TimeStampedModel):
    ask = models.DecimalField(max_digits=18, decimal_places=8)
    bid = models.DecimalField(max_digits=18, decimal_places=8)
    pair = models.ForeignKey(Pair)

tasks.py

from celery import shared_task
...
@shared_task()
def get_all_tickers():
    pair = Pair.objects.last()
    ticker = Ticker(ask=Decimal(1.0), bid=Decimal(1.0), pair=pair)
    ticker.save()

django服务器( root )和芹菜( celery_user )任务由不同的用户运行,因此, celery_user 尚未写入数据库。因此, task.apply() root 运行,并且可以save()记录和 task.apply_async()- celery_user 和不能。

此问题的短期解决方案是使 celery_user 数据库的所有者(使用sqlite的开发env 3):

chown celery_user:celery_user db.sqlite3

尽管在 celery_user 中添加一个组会更合适(对于短期)。

或长期 - 与无私人用户一起运行所有内容

p.s。:我在http://docs.celeryproject.org/en/latest/reference/celery.contrib.rdb.html(芹菜的调试工具)时遇到了一些问题。每次收到任务时(即每30秒),Telnet都会断开连接。确保您正在使用专门用于调试的任务。

相关内容

  • 没有找到相关文章

最新更新