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

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

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

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

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

解決

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

原因

每次發(fā)送請(qǐng)求時(shí) aiohttp.ClientSession 查詢dns 。這個(gè)查詢dns是阻塞的,所以它每次查詢dns時(shí)開(kāi)啟一個(gè)線程的。

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

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)行程序時(shí) 有可能提示 需要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

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

  • / - 首頁(yè)返回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()也是一個(gè)coroutine,loop.create_server()則利用asyncio創(chuàng)建TCP服務(wù)。

總結(jié)

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

相關(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),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Python中使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能

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

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

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

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

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

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

    python3 如何解壓縮.gz文件

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

    詳解Python3 pandas.merge用法

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

    Python splitlines使用技巧

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

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

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

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

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

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

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

最新評(píng)論