Python多请求url

2024-05-17 04:36:30 发布

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

大家好, 我刚开始接触python(我刚开始不到2周) 所以我需要一些建议和技巧:p

获取大约1500个api请求的最快和最有效的方法是什么?在

  1. 使用异步函数来执行它们并返回 结果?在
  2. 将它们分成300个URL的列表,然后将每个 将在异步循环中执行它们的线程中列出?在
  3. 按照第二个建议做同样的事情,但是要使用流程 而不是线?在

目前它对我很有用,但是执行1400个api请求需要大约8秒的时间,但是当我尝试一个没有线程的请求时,它需要9秒 我做错什么了??!

获取一个URL(我试图将会话作为param传递,但是当到达700个请求时,我得到了错误)

async def fetch_one(url):
    async with curio_http.ClientSession() as session:
        response = await session.get(url)
        content =  await response.json()
        return  content

在异步循环中获取URL列表

^{pr2}$

创建线程,并根据URL/X逐个循环在其中放置异步循环

例如multifitch(url[600],200)将创建3个线程,以异步方式逐线程调用200个请求

def MultiFetch(URLS,X):
    MyThreadsList = []
    MyThreadsResults = []
    N_Threads = (lambda x:  int (x/X) if (x % X == 0) else int(x/X)+1) (len(URLS))
    for i in range( N_Threads  ): # will iterate X = ListSize / X
              MyThreadsList.append( Thread(  target = curio.run , args = (fetchMultiURLs( (URLS[ i*X:(X*i+X)]) )  ,)    )  )
              MyThreadsList[i].start()
    for i in range( N_Threads  ):
              MyThreadsResults.append(MyThreadsList[i].join())
    return MyThreadsResults

Tags: apiurl列表curioasyncresponsesessiondef
1条回答
网友
1楼 · 发布于 2024-05-17 04:36:30

最后我找到了一个解决方案:)获取1400个URL需要2.2秒

我使用了3ed建议(进程内的异步循环)

#获取1个URL

async def fetch_one(url):
    async with curio_http.ClientSession() as session:
        response = await session.get(url)
        content =  await response.json()
        return  content

#获取X个URL 异步def fetchmultiurl(url_列表): 任务=[] 响应=[] 对于url_列表中的url: 任务=等待古董。产卵(获取一(url)) 任务.append(任务)

^{pr2}$

#我试图用lambda代替这个函数,但它不起作用

def RuningCurio(X):
    return curio.run(fetchMultiURLs(X))

#根据URL创建进程和异步循环/X循环URL

\

^{4}$

我在1.1s内获取2100个网址我希望这个解决方案能帮助你们

相关问题 更多 >