Python 芹菜:从上一个任务异步检索部分结果
我想链接我的ETL工作流,加载任务可以异步地流式传输ExtractTransform任务的部分结果,而不必等待ExtractTransform完成。芹菜可以吗 我正在考虑两种方法: 方法1 创建一个ETLTask,其中LoadTask(以某种方式)不断从ETLTask获取部分结果并将其出列(本质上分离生产者和消费者)。我从照片上看不出这是否可能。听起来我只是想走一条生产商和消费者分开的道路,我不知道如何在芹菜中做到这一点Python 芹菜:从上一个任务异步检索部分结果,python,celery,etl,Python,Celery,Etl,我想链接我的ETL工作流,加载任务可以异步地流式传输ExtractTransform任务的部分结果,而不必等待ExtractTransform完成。芹菜可以吗 我正在考虑两种方法: 方法1 创建一个ETLTask,其中LoadTask(以某种方式)不断从ETLTask获取部分结果并将其出列(本质上分离生产者和消费者)。我从照片上看不出这是否可能。听起来我只是想走一条生产商和消费者分开的道路,我不知道如何在芹菜中做到这一点 class ExtractTransformTask(Task):
class ExtractTransformTask(Task):
def long_running_extract_transform(self):
pass
def run(self):
return self.long_running_extract_transform()
class LoadTask(Task):
def long_running_load(self):
pass
def run(self, results):
self.long_running_load(results)
class ETLTask(Task):
def run(self):
et_result = ExtractTransformTask.delay()
# while et_result PENDING or SUCCESS
# dequeue current results and load with LoadTask instance
方法2
分块提取源数据并创建多个加载任务。使用方法2解决方案
class ExtractTransformMixin(object):
def long_running_extract_transform(self, chunkify=False):
pass
class LoadTask(Task):
def long_running_load(self):
pass
def run(self, results):
self.long_running_load(results)
class ETLTask(ExtractTransformMixin, Task):
def run(self):
load_results = ResultSet([])
for chunk in long_running_extract_transform(chunkify=True):
load_results.add(LoadTask().delay(chunk))
return load_results