欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python aiohttp創(chuàng)建很多線程的問題及解決

 更新時間:2024年06月27日 10:56:20   作者:Mr_Ershat  
這篇文章主要介紹了python aiohttp創(chuàng)建很多線程的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

python aiohttp創(chuàng)建很多線程

最近使用 python aiohttp 進(jìn)行異步的發(fā)送請求,在命令行中 用py-spy 來監(jiān)控了一下 發(fā)現(xiàn) 運(yùn)行python程序 創(chuàng)建了 125 線程,嚇了我一跳。

解決

Google了很久 找到解決方法了。

原因

每次發(fā)送請求時 aiohttp.ClientSession 查詢dns 。這個查詢dns是阻塞的,所以它每次查詢dns時開啟一個線程的。

所以我在代碼里 給它指定了 dns查詢對象 起作用了。

from aiohttp.resolver import AsyncResolver
resolver = AsyncResolver()
tcp_conn = aiohttp.TCPConnector(resolver=resolver)
async with aiohttp.ClientSession(connector=tcp_conn) as session:
	await process_spider(spider, session)

運(yùn)行程序時 有可能提示 需要aiodns. 安裝即可: pip install aiodns .

python aiohttp模塊使用

asyncio可以實(shí)現(xiàn)單線程并發(fā)IO操作。如果僅用在客戶端,發(fā)揮的威力不大。

如果把asyncio用在服務(wù)器端,例如Web服務(wù)器,由于HTTP連接就是IO操作,因此可以用單線程+coroutine實(shí)現(xiàn)多用戶的高并發(fā)支持。

asyncio實(shí)現(xiàn)了TCP、UDP、SSL等協(xié)議,aiohttp則是基于asyncio實(shí)現(xiàn)的HTTP框架。

我們先安裝aiohttp

pip install aiohttp

然后編寫一個HTTP服務(wù)器,分別處理以下URL:

  • / - 首頁返回b'<h1>Index</h1>';
  • /hello/{name} - 根據(jù)URL參數(shù)返回文本hello, %s!。

代碼如下:

import asyncio

from aiohttp import web

async def index(request):
    await asyncio.sleep(0.5)
    return web.Response(body=b'<h1>Index</h1>')

async def hello(request):
    await asyncio.sleep(0.5)
    text = '<h1>hello, %s!</h1>' % request.match_info['name']
    return web.Response(body=text.encode('utf-8'))

async def init(loop):
    app = web.Application(loop=loop)
    app.router.add_route('GET', '/', index)
    app.router.add_route('GET', '/hello/{name}', hello)
    srv = await loop.create_server(app.make_handler(), '127.0.0.1', 8000)
    print('Server started at http://127.0.0.1:8000...')
    return srv

loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()

注意aiohttp的初始化函數(shù)init()也是一個coroutineloop.create_server()則利用asyncio創(chuàng)建TCP服務(wù)。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pandas數(shù)據(jù)形狀df.shape的實(shí)現(xiàn)

    Pandas數(shù)據(jù)形狀df.shape的實(shí)現(xiàn)

    本文主要介紹了Pandas數(shù)據(jù)形狀df.shape的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Python中使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能

    Python中使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能

    django是python語言的一個web框架,功能強(qiáng)大。配合一些插件可為web網(wǎng)站很方便地添加搜索功能。下面通過本文給大家分享Python中使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能,感興趣的朋友一起看看吧
    2017-08-08
  • python 裝飾器詳解與應(yīng)用范例

    python 裝飾器詳解與應(yīng)用范例

    裝飾器是 Python 的一個重要部分。簡單地說:他們是修改其他函數(shù)的功能的函數(shù)。他們有助于讓我們的代碼更簡短,也更Pythonic。大多數(shù)初學(xué)者不知道在哪兒使用它們,所以我將要分享下,哪些區(qū)域里裝飾器可以讓你的代碼更簡潔。 首先,讓我們討論下如何寫你自己的裝飾器
    2021-11-11
  • python+selenium打印當(dāng)前頁面的titl和url方法

    python+selenium打印當(dāng)前頁面的titl和url方法

    今天小編就為大家分享一篇python+selenium打印當(dāng)前頁面的titl和url方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python3 如何解壓縮.gz文件

    python3 如何解壓縮.gz文件

    這篇文章主要介紹了python3 如何解壓縮.gz文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 詳解Python3 pandas.merge用法

    詳解Python3 pandas.merge用法

    pandas提供了一組高級的、靈活的、高效的核心函數(shù),能夠輕松的將數(shù)據(jù)規(guī)整化。這節(jié)主要對pandas合并數(shù)據(jù)集的merge函數(shù)進(jìn)行詳解,感興趣的朋友跟隨小編一起看看吧
    2019-09-09
  • Python splitlines使用技巧

    Python splitlines使用技巧

    Python中的splitlines用來分割行。當(dāng)傳入的參數(shù)為True時,表示保留換行符 \n。通過下面的例子就很明白了
    2008-09-09
  • Python基礎(chǔ)中的的if-else語句詳解

    Python基礎(chǔ)中的的if-else語句詳解

    這篇文章主要為大家詳細(xì)介紹了Python基礎(chǔ)中的的if-else語句,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • django實(shí)現(xiàn)模板中的字符串文字和自動轉(zhuǎn)義

    django實(shí)現(xiàn)模板中的字符串文字和自動轉(zhuǎn)義

    這篇文章主要介紹了django實(shí)現(xiàn)模板中的字符串文字和自動轉(zhuǎn)義,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 用Python寫漏洞驗(yàn)證腳本的代碼

    用Python寫漏洞驗(yàn)證腳本的代碼

    這篇文章主要介紹了用Python寫漏洞驗(yàn)證腳本,本文給大家分享完整實(shí)例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02

最新評論