芹菜块大数据集

时间:2017-05-15 16:49:17

标签: python celery

我正在尝试使用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的元组列表。

关于如何将元组列表传递给芹菜块的任何帮助/想法都将受到高度赞赏。

提前致谢

0 个答案:

没有答案