aiohttp模塊如何使用

aiohttp 簡介

aiohttp 是一個基于 Python 的異步 HTTP 客戶端/服務器框架,構建于 asyncio 之上。它支持高性能的異步網絡操作,適用于 Web 服務、爬蟲、API 調用等場景。

核心功能

  • HTTP 客戶端:支持異步發送 HTTP 請求,處理響應。
  • HTTP 服務器:提供異步 Web 服務器功能,支持路由、中間件等。
  • WebSocket:支持客戶端和服務端的 WebSocket 通信。
  • Session 管理:通過 ClientSession 復用連接,提升性能。

安裝

通過 pip 安裝:

pip install aiohttp


異步 HTTP 客戶端示例

以下是一個簡單的異步 HTTP GET 請求示例:

import aiohttp
import asyncioasync def fetch_data(url):async with aiohttp.ClientSession() as session:async with session.get(url) as response:return await response.text()async def main():url = "https://httpbin.org/get"data = await fetch_data(url)print(data)asyncio.run(main())

關鍵點

  • 使用 ClientSession 管理 HTTP 連接。
  • response.text() 異步獲取響應內容。

異步 HTTP 服務器示例

創建一個簡單的 Web 服務器:

from aiohttp import webasync def handle(request):return web.Response(text="Hello, aiohttp!")app = web.Application()
app.add_routes([web.get("/", handle)])if __name__ == "__main__":web.run_app(app, port=8080)

路由與響應

  • 通過 web.get 定義路由。
  • web.Response 生成 HTTP 響應。

WebSocket 通信示例

客戶端

async def websocket_client():async with aiohttp.ClientSession() as session:async with session.ws_connect("ws://echo.websocket.org") as ws:await ws.send_str("Hello, WebSocket!")async for msg in ws:if msg.type == aiohttp.WSMsgType.TEXT:print(f"Received: {msg.data}")

服務端

async def websocket_handler(request):ws = web.WebSocketResponse()await ws.prepare(request)async for msg in ws:if msg.type == aiohttp.WSMsgType.TEXT:await ws.send_str(f"Echo: {msg.data}")app.add_routes([web.get("/ws", websocket_handler)])


性能優化建議

  • 復用 ClientSession:避免頻繁創建/關閉會話,減少開銷。
  • 連接池限制:通過 connector 參數調整連接池大小。
  • 超時設置:使用 timeout 參數避免請求阻塞。

示例:

timeout = aiohttp.ClientTimeout(total=10)
connector = aiohttp.TCPConnector(limit=20)
async with aiohttp.ClientSession(timeout=timeout, connector=connector) as session:...


常見問題

  1. 協程未執行:確保調用 asyncio.run() 或事件循環啟動。
  2. 連接泄露:檢查是否未關閉 ClientSession 或響應對象。
  3. SSL 錯誤:添加 ssl=False 參數(僅測試環境)。

通過上述方法和示例,可以快速上手 aiohttp 的異步 HTTP 和 WebSocket 開發。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94746.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94746.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94746.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ModuleNotFoundError: No module named ‘dbgpt_app‘

問題原因:這個問題的核心是Python的模塊導入機制。即使能看到dbgpt_app目錄,但Python解釋器可能找不到它,這是因為Python需要知道去哪里查找這個模塊。讓我用簡單的語言解釋一下: Python的模塊搜索路徑 Python解釋器在導入模塊時&…

死鎖產生的條件是什么? 如何進行死鎖診斷?

1. 死鎖產生的條件是什么?一個線程需要同時獲取多把鎖,這時就容易發生死鎖2. 如何進行死鎖診斷?當程序出現了死鎖現象,我們可以使用jdk自帶的工具:jps和jstackjps:輸出JVM中運行的進程狀態信息jstack:查看java進程內線程的堆棧信息,查看日志,檢查是否有死鎖,如果有…

【科研繪圖系列】R語言在海洋生態學數據可視化中的應用:以浮游植物葉綠素和初級生產力為例

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹 數據準備 數據處理 葉綠素含量(Chl:C)隨年齡的變化 初級生產力(NPP)隨年齡的變化 數據可視化 加載R包 數據下載 導入數據 數據預處理 畫圖 保持圖片 總結 系統信息 介紹 本教…

【Qt開發】常用控件(七)-> styleSheet

目錄 1 -> 引言:為什么需要 Qt 樣式表? 2 -> Qt 樣式表基礎 2.1 -> 什么是 Qt 樣式表 2.2 -> 基本語法結構 3 -> 選擇器類型 3.1 -> 通用選擇器 3.2 -> 類型選擇器 3.3 -> 類選擇器 3.4 -> ID 選擇器(通…

linux 正則表達式學習

本篇主要學習幾個正則表達式匹配符&#xff1a; ^&#xff1a;錨定行首$&#xff1a;錨定行尾\< 或者 \b&#xff1a;錨定詞首\>或者 \b&#xff1a;錨定詞尾\B&#xff1a;匹配”非單詞邊界” 下面通過實驗徹底掌握&#xff1a; 測試文件內容如下&#xff1a; cat test.…

MIPS匯編快速入門 【龍芯】

一、前言&#xff1a;MIPS與龍芯的淵源 MIPS&#xff08;Microprocessor without Interlocked Pipelined Stages&#xff09;是一種經典的RISC&#xff08;精簡指令集&#xff09;架構&#xff0c;以流水線高效、指令簡潔、低功耗為特點。龍芯&#xff08;Loongson&#xff09;…

如何對springboot mapper 編寫單元測試

如何對springboot mapper 編寫單元測試在 Spring Boot 中對 MyBatis Mapper 編寫單元測試的核心目標是??隔離真實數據庫依賴??&#xff0c;驗證 SQL 邏輯與數據庫交互的正確性。以下是完整的實踐指南&#xff0c;涵蓋環境配置、測試數據初始化、具體測試用例編寫及常見問題…

學習游戲制作記錄(數據加密以及主菜單和畫面優化)8.27

1.實現數據加密FileDataHandler 腳本&#xff1a;private bool encryptData false;//是否加密public string codeWord "alexdev";//加密碼public FileDataHandler(string _dataDirPath, string _fileName, bool _encryptData){dataDirPath _dataDirPath;FileName …

五自由度磁懸浮軸承同頻振動抑制:從機理拆解到傳遞函數驗證的核心方案

摘要 五自由度磁懸浮軸承憑借無摩擦、高轉速的優勢,在航空航天、透平機械等領域應用廣泛,但轉子不平衡質量引發的同頻振動(頻率與轉子轉速一致)始終是制約其精度的核心痛點。本文從轉子不平衡振動的物理機理出發,詳細推導不平衡力的數學模型,分析位移輸出中擾動信號的疊…

CSS 優先級:公司組織架構模型

為什么我的CSS樣式不生效&#xff1f; 在網頁開發中&#xff0c;你可能經常會遇到一個令人困惑的問題&#xff1a;你明明寫了CSS代碼&#xff0c;但是樣式卻不生效&#xff0c;或者出現了意想不到的沖突。你可能會反復檢查代碼&#xff0c;卻找不到任何語法錯誤。這背后隱藏的原…

Go語言循環語句全解析

循環語句概述循環語句在編程中的作用循環語句是編程中控制程序流程的重要結構&#xff0c;它允許我們重復執行特定代碼塊&#xff0c;直到滿足終止條件。在數據處理、算法實現、系統監控等場景中&#xff0c;循環都發揮著關鍵作用。典型應用場景&#xff1a;數據處理&#xff1…

基于NXP iMXRT600音頻算法開發方法

iMXRT600 是一款高性能的微控制器&#xff0c;在開發音頻算法時可按以下步驟和方法進行&#xff1a;1. 開發環境搭建硬件平臺準備好 iMXRT600 開發板&#xff0c;確保開發板上具備音頻輸入輸出接口&#xff0c;如 I2S&#xff08;Inter - IC Sound&#xff09;接口用于音頻數據…

怎么理解API?

想象一下你去一家餐廳吃飯。你&#xff08;用戶&#xff09;不會直接走進廚房告訴廚師怎么做菜&#xff0c;對吧&#xff1f;你會怎么做&#xff1f;你會拿起菜單&#xff0c;查看上面列出的菜品&#xff08;例如“意大利面”&#xff09;、它們的描述和價格。然后&#xff0c;…

系統架構設計師備考第7天——網絡協議中間件軟件構件

一、網絡協議 核心概念 定義&#xff1a;網絡協議是計算機通信的“語言規則”&#xff0c;規定了數據格式、傳輸時序、控制信號等&#xff0c;確保不同系統實體間正常通信。作用&#xff1a;實現資源共享與信息交換的基礎。常見類型&#xff1a; 局域網協議&#xff08;LAN&…

《數據之心》

《數據之心》一、故障2045年&#xff0c;中國“天算”量子云中樞第七區。魚小妖站在控制臺前&#xff0c;指尖劃過全息屏&#xff0c;藍光映在她清秀的臉龐上。她的長發如墨&#xff0c;眸子卻似星河&#xff0c;倒映著無數跳動的數據流。她是第七區最年輕的系統神經工程師&…

《C++ Primer 第五版》不要返回局部對象的引用或指針

1. 先看一個“看似合理”的例子#include <iostream> using namespace std;int& foo() {int x 10; // 局部變量&#xff0c;存在于棧中return x; // 返回它的引用 }int main() {int& ref foo(); // ref 綁定到了已經被銷毀的 xcout << ref &…

2024鴻蒙樣題需要掌握的知識點

一、讀取json格式文件為對象或數組&#xff0c;顯示相應字段1、創建json文件的參數一致的類2、導入類、導入json文件3、循環渲染import router from ohos.router //導入即對象 import books from resources/rawfile/book1.json import { Book } from ../model/BookEntry Compon…

QML Charts組件之坐標軸示例

目錄引言&#x1f3af; 運行效果預覽&#x1f4da; 相關系列文章五種坐標軸詳解與代碼實踐1. 數值坐標軸&#xff08;ValueAxis&#xff09;示例代碼說明2. 對數坐標軸&#xff08;LogValueAxis&#xff09;示例代碼說明3. 日期坐標軸&#xff08;DateTimeAxis&#xff09;示例…

Vue3+ElementPlus倒計時示例

按鈕文字默認顯示“開始倒計時”當點擊按鈕時&#xff0c;顯示正在倒計時(倒計時數字)倒計時結束按鈕顯示“開始倒計時” 倒計時邏輯 Hooks 函數 hooks/useCountDown.js /*** hooks函數&#xff1a;函數是用于封裝和復用組件邏輯的一種機制* 定義&#xff1a;Hooks 是一種在不使…

docker 的網絡

1.查看docker里面的網絡docker network ls 2.查看某個 Docker 網絡的 網關 IP 和 子網段docker network inspect <網絡名或ID>