使用 Celery,在单个 celery 任务中执行 URL 列表是否有可能?

问题描述

views.py

urls=["https//:.....com,https//:.....com,etc.."]
for i in urls:
   r=process.delay(i)

当我调用 celery 任务时,它会执行单独的任务。如何在单个 celery 任务中执行一组列表?

tasks.py

@app.task
def process(url):
    r = requests.get(url,allow_redirects=True)
    return r

解决方法

您可以将一组 URL 甚至整个列表传递给 celery 任务。但这没有多大意义,因为我们实际上并没有利用并行的传出请求,因为每个 URL 都将被一个接一个地串行访问。

views.py

urls=["https//:.....com","https//:.....com",...]
r = process.delay(urls)

tasks.py

@app.task
def process(urls):
    results = []
    for url in urls:
        r = requests.get(url,allow_redirects=True)
        results.append(r)
    return results

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...