【发布时间】:2020-06-03 12:24:09
【问题描述】:
我有 Django==2.2.8 和 celery==4.3.0,redis 作为代理。
有非常简单的drf 视图来创建BankEntry。
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
instance = serializer.save()
bank_entry = BankEntries.objects.get(pk=instance.id)
async_task = async_create_transactions.delay(bank_entry.pk) <--- celery task
@celery_app.task()
def async_create_transactions(entry_id):
bank_entry = BankEntries.objects.filter(pk=entry_id).first()
if bank_entry: <---- HERE SOMETIMES BANK_ENTRY IS NONE, But why, we just created it
return bank_entry.create_entries()
不知道为什么,但在async_create_transactions 我可以得到刚刚创建的BankEntry。
我确定 celery 设置使用相同的数据库,因为在下一次 async_create_transactions 调用中,我可以看到以前的 BankEntry 但看不到当前的。
我没有,钩子、信号、postgresql函数和其他副作用。
【问题讨论】:
-
你在
BankEntries表中使用uuid作为主键吗? -
@NafeesAnwar 更新了代码,以表明我确定创建了 bank_entry 并将 pk 替换为 id
标签: python django celery django-celery