0
@db_task()
def test_db_access(tenant_id, batch_obj):
    print('DBAccess')
    print(tenant_id)
    print(batch_obj.id)
    files = File.objects.filter(batch_id=batch_obj.id)
    print(files)

如果我在没有 django-huey 的 django 中运行它,我会得到一个过滤的查询集,但是如果我开始使用 django-huey,我总是会得到一个空的查询集。只有“DBAccess”被打印,文件总是“[]”。

我是否必须在 settings.py 中添加其他设置?这是我当前的 Huey 设置

# Huey - Task Queue
HUEY = {
    'name': 'appname',
    'consumer': {
        'workers': 4, 
        'worker_type': 'thread'
    },
    'immediate': False,
    'connection': {
        'host': RedisConfig.HOST,
        'port': RedisConfig.PORT,
    },
}
4

1 回答 1

0

您试图将一个对象作为参数传递给该函数,但它可能没有被序列化——huey 用于pickle序列化传递给消费者的函数调用数据。相反,更改您的函数以接受batch_obj如下标识符:

@db_task()
def test_db_access(tenant_id, batch_obj_id):
    print('DBAccess')
    print(tenant_id)
    print(batch_obj_id)
    files = File.objects.filter(batch_id=batch_obj_id)
    print(files)

batch_obj_id=batch_obj.id并在你打电话时传入test_db_access。或者,您可以编写自定义序列化程序,但只传递数字标识符应该更简单。

于 2021-06-18T20:46:05.827 回答