我正在尝试使用celery的块功能将我的可迭代数据集分成多个部分,然后将其发送到芹菜任务以进行进一步处理。 我有一个query_set,我从进行以下sqlalchemy调用
query_set = MyModel.query.join(OtherModel).all())
目前,query_set是一个元组列表。 query_results的长度为40,000并且还在增长。
我有另一个函数(芹菜任务)来处理query_set中的数据,其定义是
@celery_app.task
def crunch_qs(query_set):
. . .
. . .
由于query_set是一个元组列表,我想我可以直接将它传递给crunch_qs
这样
crunched_qs = crunch_qs.chunks(query_set, 5000)()
results = crunched_qs.get()
那不起作用。它给了我一个意想不到的结果。它正在解压缩每个query_set的元组中的项目并将它们发送到crunch_qs
。
所以crunch_qs
会在第一次迭代时收到** query_set [0],这会引发以下错误
TypeError:crunch_qs()只取1个参数(给定10个)
len(query_set [0])= 10
我也试过..
crunched_qs = crunch_qs.chunks((row,) for row in query_set, 5000)()
results = crunched_qs.get()
效果好一点。 TypeError消失了。但是,我的crunch_qs
函数现在将每行(元组)作为参数而不是长度为5000的元组列表。
关于如何将元组列表传递给芹菜块的任何帮助/想法都将受到高度赞赏。
提前致谢