账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    并行请求的实现
    81
    0

    请答主尽量不要用“aiohttp、asyncio、aiofiles”,实在弄不明白。

    具体的代码如下(串行),同样功能如何实现并行?

    import requests
    
    def getdata(num):
      params={
      'id':'123456789',
      'num':num
            }
      url='http://httpbin.org/post'
      r=requests.post(url,params=params).json()
      return r['url']
    
    def main():
      nums=range(0,100)
      urls=[]
      for num in nums:
        url=getdata(num)
        urls.append(url)
      print(urls)
    
    main()

    相关实现方法(仍未解决本人的问题)

    我已知的能实现并行请求的简单方法如下,但是该方法的局限性是:必须先有URL列表,不能带参数,而实际开发当中需要带参数请求,虽然上面的问题,可以事先根据参数生成URL列表,但是我想知道事先无法生产URL列表的情况怎么实现并行,比如要提交form data时该怎么实现并行:

    import requests
    from multiprocessing.dummy import Pool as ThreadPool
    urls = ['http://www.baidu.com']*20
    
    # Make the Pool of workers
    pool = ThreadPool(10)
    
    # Open the urls in their own threads
    # and return the results
    results = pool.map(requests.get, urls)
    
    #close the pool and wait for the work to finish
    pool.close()
    pool.join()
    print(results)
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 共 0 条
    • 我有四知 普通会员 1楼

      并行请求是网络编程中常用的一种技术,它可以将多个独立的任务或请求并发执行,以提高系统的处理能力。下面是一个使用Python和Python的asyncio库来实现并行请求的基本示例:

      ```python import asyncio

      async def request_one(url): async with aiohttp.ClientSession() as session: async with session.get(url) as response: return response.text

      async def request_all(urls): tasks = [request_one(url) for url in urls] tasks_result = await asyncio.gather(*tasks) return tasks_result

      urls = ["http://example.com", "http://another.example.com"] result = request_all(urls) print(result) ```

      在这个示例中,request_one函数用于发送一个GET请求到一个指定的URL。request_all函数接受一个包含多个URL的列表,然后使用asyncio.gather函数并行地发送每个URL的GET请求。asyncio.gather函数接受一个可迭代对象(如列表、元组或字符串)和一个yield from语句,它将返回一个生成器,该生成器在每个迭代中执行一个yield语句。在本例中,yield from语句是将request_one函数作为参数传递给asyncio.gather函数的,这样request_one函数就会在每个URL上被并行执行。

      然后,request_all函数返回一个包含所有并发请求结果的列表。这个列表使用asyncio.gather函数并行地执行,所以所有请求都会在同一个进程中完成。

      最后,我们创建了一个包含两个URL的列表,并调用request_all函数来获取所有并发请求的结果。然后,我们将结果打印出来,可以看到每个URL的GET请求都在不同的进程中执行,从而实现了并行请求的效果。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部