使用Asyncio在Djano视图中异步运行10个函数

2024-09-28 01:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

在Django中使用asyncio同时执行大约10个函数时,我遇到了困难。我找不到任何关于如何将asyncio与django一起使用的清晰文档

我使用TOR向不同的服务器发出了大约10个http请求,默认情况下,TOR速度很慢。我希望同时执行所有10个请求,而不是一个接一个地发出这些请求(通常需要2分钟左右)。有10个不同的函数,每个函数使http请求具有不同的URL、刮取数据并返回JSON

urlsrap.py

async def scrape1(username):
    response = request.get('http://example.com'+username)
    return response.json()

async def scrape2(username):
    response = request.get('http://something.com'+username)
    return response.json()

我有10个单独的函数,如上面所述,具有不同的URL和perfrom抓取并返回json数据。在Django的观点中,我喜欢这样:

视图.py

from URLscrape import scrape1, scrape2........scrape10

def scrapper():
    loop = asyncio.get_event_loop()
    feature1 = loop.run_in_executor(None, scrape1, username)
    feature2 = loop.run_in_executor(None, scrape2, username)
    ....
    feature10 = loop.run_in_executor(None, scrape10, username)

    response1 = await future1
    response2 = await future2 
    .....
    response10 = await future10
 
    response1 = response1.text
    ......
    response10 = response2.text
  
    return render(request, 'index.html', {'scrape1':response1,'scrape10':response10})

但是我不知道如何使用循环。运行\u直到\u complete()完成脚本。Im在使用10个单独功能进行刮取时受到限制。我想同时运行10个,但我不知道如何运行。我无法理解asyncio的概念和语法。请帮忙


Tags: 函数loopasynciojsonhttpgetreturnresponse

热门问题