与回调请求python 3的简单异步

问题描述 投票:-3回答:1

[我是python的新手,我正在尝试开发发送大约10,000个请求以测试我的API的应用,我使用pyqt5 to和python 3,我想使用请求发出多个A-sync请求,发送多个请求并不等待响应,而是在响应准备就绪时添加回调,例如更新UI,请给我一个有效的示例,感谢帮助

python python-3.x python-requests asynccallback
1个回答
0
投票

我尝试使用您的代码,但无需在会话中添加代理即可工作。这里是代码

import aiohttp
import asyncio
import sys
import time
from decimal import localcontext, Decimal, ROUND_HALF_UP
from datetime import datetime,timezone ,timedelta
BASE_URI = 'https://d.com/session.php'

def show_exception_and_exit(exc_type, exc_value, tb):
        traceback.print_exception(exc_type, exc_value, tb)
        sys.exit(-1)


async def fetch(session, url):
    proxies = {
        "http"  :"http://W09s1H:[email protected]:9951",
        "https" :"https://W09s1H:[email protected]:9951"
        }
    Timestamp = int((datetime.utcnow() - datetime(1970,1,1)).total_seconds())
    headers = {
        "user-agent": "Mozilla/5.0 (X11; Linux i686; rv:64.0) Gecko/20100101 Firefox/64.0"
        }
    JsonSession = "{'device':'id'}"

    async with session.post(url,
                            data=JsonSession,
                            headers=headers,
                            params={"timestamp":Timestamp}) as response:
        return await response.text()

async def main(url):
    tasks = []
    results = []
    async with aiohttp.ClientSession() as session:
        for n  in range(1,10):
            tasks.append(fetch(session, url))
        results = await asyncio.gather(*tasks)
    return results

def parallel(url):
    loop = asyncio.get_event_loop()
    results = loop.run_until_complete(main(url))
    return results

# --- main ---



result = parallel(BASE_URI)

for item in result:
    print(item[:300])
    print('-----')

并且当我添加这样的代理时:

 async with session.post(url,
                            data=JsonSession,
                            headers=headers,
                            params={"timestamp":Timestamp},
                            proxies=proxies) as response:

我收到错误

Traceback (most recent call last):
  File "C:/Users/soft/AppData/Local/Programs/Python/Python37-32/MyApp/Scripts/Test.py", line 51, in <module>
    result = parallel(BASE_URI)
  File "C:/Users/soft/AppData/Local/Programs/Python/Python37-32/MyApp/Scripts/Test.py", line 44, in parallel
    results = loop.run_until_complete(main(url))
  File "C:\Users\soft\AppData\Local\Programs\Python\Python37-32\lib\asyncio\base_events.py", line 579, in run_until_complete
    return future.result()
  File "C:/Users/soft/AppData/Local/Programs/Python/Python37-32/MyApp/Scripts/Test.py", line 39, in main
    results = await asyncio.gather(*tasks)
  File "C:/Users/soft/AppData/Local/Programs/Python/Python37-32/MyApp/Scripts/Test.py", line 30, in fetch
    proxies=proxies) as response:
  File "C:\Users\soft\AppData\Local\Programs\Python\Python37-32\lib\site-packages\aiohttp\client.py", line 876, in post
    **kwargs))
TypeError: _request() got an unexpected keyword argument 'proxies'

如何添加代理到session.post,因为我确实需要添加它

© www.soinside.com 2019 - 2024. All rights reserved.