【发布时间】:2018-02-12 04:10:15
【问题描述】:
我想查询一个包含很多项目(~100)但不是一次全部的 api(这很耗时)。相反,我希望查询之间有一点延迟。
我目前拥有的是一个异步执行并遍历查询并在每次迭代后等待一段时间的任务:
@shared_task
def query_api_multiple(values):
delay_between_queries = 1
query_results = []
for value in values:
time.sleep(delay_between_queries)
response = query_api(value)
if response['result']:
query_results.append(response)
return query_results
我的问题是,当多个请求进来时,第二个请求会在第一个请求完成后执行还是在第一个请求仍在运行时执行?当它们没有同时被执行时,我该如何实现呢?
【问题讨论】:
-
您应该使用 ETA – 为以后安排任务,使用 ETA(估计到达时间)异步执行该任务,例如: later = now + timedelta(hours=1) access_awful_system.apply_async((object_id) , eta=later) reference ETA。
标签: python celery django-celery