python第十一課:并發編程 | 多任務交響樂團

🎯 本節目標

  • 理解多線程/多進程/協程的應用場景
  • 掌握threading與multiprocessing核心用法
  • 學會使用asyncio進行異步編程
  • 開發實戰項目:高并發爬蟲引擎
  • 破解GIL鎖的性能迷思

1?? 并發編程三劍客

在這里插入圖片描述

🎻 生活化比喻:

  • 多線程 → 餐廳多個服務員共享廚房
  • 進程 → 連鎖餐廳各自獨立分店
  • 協程 → 一個服務員同時處理多桌點餐

2?? 多線程實戰:閃電下載器

import threading  
import requests  def download(url, filename):  print(f"🚀 開始下載 {filename}")  data = requests.get(url).content  with open(filename, 'wb') as f:  f.write(data)  print(f"? {filename} 下載完成")  # 創建線程列表  
threads = []  
urls = [  ('https://example.com/1.jpg', 'pic1.jpg'),  ('https://example.com/2.mp4', 'video.mp4')  
]  for url, name in urls:  t = threading.Thread(target=download, args=(url, name))  threads.append(t)  t.start()  # 等待所有線程完成  
for t in threads:  t.join()  
print("🎉 所有下載任務完成!")  

3?? 協程魔法:異步爬蟲引擎

import asyncio  
import aiohttp  async def async_fetch(session, url):  async with session.get(url) as response:  return await response.text()  async def main():  async with aiohttp.ClientSession() as session:  tasks = [  async_fetch(session, f"https://api.example.com/data/{i}")  for i in range(100)  ]  results = await asyncio.gather(*tasks)  print(f"📊 獲取到 {len(results)} 條數據")  # Python 3.7+ 使用 asyncio.run()  
asyncio.run(main())  

4?? GIL鎖:性能瓶頸與突破

🔒 GIL(全局解釋器鎖)真相

  • 單進程中同一時間只有一個線程執行字節碼
  • 單進程中同一時間只有一個線程執行字節碼
    破解方案:
# 使用多進程繞過GIL限制  
from multiprocessing import Pool  def heavy_compute(n):  return sum(i*i for i in range(n))  with Pool(4) as p:  results = p.map(heavy_compute, [10**6]*4)  

5?? 實戰項目:智能并發爬蟲

import concurrent.futures  
import requests  def advanced_crawler(urls, max_workers=5):  """智能并發爬蟲"""  with concurrent.futures.ThreadPoolExecutor(max_workers) as executor:  future_to_url = {  executor.submit(requests.get, url): url  for url in urls  }  for future in concurrent.futures.as_completed(future_to_url):  url = future_to_url[future]  try:  data = future.result()  print(f"🌐 {url} 抓取成功(長度:{len(data.text)})")  except Exception as e:  print(f"? {url} 抓取失敗:{str(e)}")  # 使用示例  
url_list = [f"https://example.com/page/{i}" for i in range(50)]  
advanced_crawler(url_list, max_workers=10)  

📚 知識圖譜

并發編程決策樹:┌───────────────┐  │   任務類型?   │  └───────┬───────┘  ┌────────────┴────────────┐  ┌─────▼─────┐            ┌──────▼──────┐  │ I/O密集型  │            │ CPU密集型    │  └─────┬─────┘            └──────┬──────┘  ┌──────▼──────┐           ┌──────▼──────┐  │ 多線程/協程 │           │   多進程     │  └─────────────┘           └─────────────┘  PyCharm并發調試技巧:  1. 線程/進程ID顯示:View → Toolbar → Show Threads  2. 協程堆棧追蹤:async堆棧模式切換  3. 內存/CPU監控:右鍵狀態欄 → 勾選Memory Indicator  

🛠? 課后挑戰

  1. 使用生產者-消費者模式實現多線程任務隊列
  2. 將異步爬蟲改造為支持斷點續傳
  3. 用多進程計算100個1e6大小隨機數組的標準差

💡 參考答案提示:

# 生產者-消費者模型核心  
import queue  task_queue = queue.Queue(maxsize=100)  def producer():  while True:  item = generate_item()  task_queue.put(item)  def consumer():  while True:  item = task_queue.get()  process_item(item)  task_queue.task_done()  

🚀 下節劇透:《網絡編程:連接世界的數字橋梁

👉 你將解鎖:

  • TCP/UDP協議底層原理
  • Socket編程實戰技巧
  • HTTP服務器從零實現
  • 實戰:即時聊天系統開發

📢 互動任務:在評論區分享你遇到過的并發難題,點贊最高的問題將獲得《Python并發編程實戰》實體書!

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

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

相關文章

微服務架構實踐:SpringCloud與Docker容器化部署

## 微服務架構實踐:SpringCloud與Docker容器化部署 隨著互聯網應用的復雜性不斷增加,傳統的單體應用架構面臨著諸多挑戰,如難以部署、維護困難、開發效率低下等問題凸顯出來。為了解決這些問題,微服務架構應運而生,它通…

SpringBoot實戰(三十二)集成 ofdrw,實現 PDF 和 OFD 的轉換、SM2 簽署OFD

目錄 一、OFD 簡介 1.1 什么是 OFD?1.2 什么是 版式文檔?1.3 為什么要用 OFD 而不是PDF? 二、ofdrw 簡介 2.1 定義2.2 Maven 依賴2.3 ofdrw 的 13 個模塊 三、PDF/文本/圖片 轉 OFD(ofdrw-conterver) 3.1 介紹&#xf…

隨機樹算法 自動駕駛汽車的路徑規劃 靜態障礙物(Matlab)

隨著自動駕駛技術的蓬勃發展,安全、高效的路徑規劃成為核心挑戰之一。快速探索隨機樹(RRT)算法作為一種強大的路徑搜索策略,為自動駕駛汽車在復雜環境下繞過靜態障礙物規劃合理路徑提供了有效解決方案。 RRT 算法基于隨機采樣思想…

Vscode通過Roo Cline接入Deepseek

文章目錄 背景第一步、安裝插件第二步、申請API key第三步、Vscode中配置第四步、Deepseek對話 背景 在前期介紹【IDEA通過Contince接入Deepseek】步驟和流程,那如何在vscode編譯器中使用deepseek,記錄下來,方便備查。 第一步、安裝插件 在…

C++ 二叉樹代碼

二叉樹代碼&#xff0c;見下 #include <iostream> using namespace std;template<typename T> struct TreeNode{T val;TreeNode *left;TreeNode *right;TreeNode():val(0), left(NULL), right(NULL)TreeNode(T x):val(x), left(NULL), right(NULL){} };template&l…

leetcode第17題求電話號碼組合

原題出于leetcode第17題https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/題目如下&#xff1a; 題目稍微有點復雜&#xff0c;初看會感覺特別復雜&#xff0c;首先我們需要理清思路&#xff1a; 最后的結果是字母組合&#xff0c;因此遍歷的是…

Deepseek對ChatGPT的沖擊?

從測試工程師的視角來看&#xff0c;DeepSeek對ChatGPT的沖擊主要體現在**測試場景的垂直化需求與通用模型局限性之間的博弈**。以下從技術適配性、效率優化、風險控制及未來趨勢四個維度展開分析&#xff1a; --- ### **一、技術適配性&#xff1a;垂直領域能力決定工具選擇…

三十五周學習周報

目錄 摘要abstract文獻閱讀1.1相關知識1.1.1 PSO1.1.2 BI-LSTM1.1.3 BI-GRU 1.2 整體框架1.3 實驗分析 總結 摘要 在本周閱讀的文獻中&#xff0c;作者提出了一種創新的水文時間序列預測模型&#xff0c;其通過將粒子群優化&#xff08;PSO&#xff09;與Bi-LSTM和Bi-GRU相結合…

Git:多人協作

目錄 多人協作一 準備工作 開發者1準備工作 開發者2準備工作 協作開發 將內容合并進master 多人協作二 開發者1進行工作 開發者2進行工作 特殊場景 將內容合并進master 之前所學習的Git操作&#xff0c;是為了多人協作開發做鋪墊的&#xff0c;因為在公司中&#xf…

登錄次數限制

文章目錄 一、應用場景與設計目的1. 應用場景2. 設計目的 二、功能設計1. 登錄限制規則2. 解鎖機制3. 適用維度 三、技術實現1. 數據存儲2. 邏輯流程3. 實現代碼示例4. 動態鎖定時間 四、安全增強與擴展1. 防止用戶名枚舉2. 加入驗證碼3. 監控與報警4. 分布式支持 五、設計思考…

計算機畢業設計SpringBoot+Vue.js景區民宿預約系統(源碼+文檔+PPT+講解)

溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 作者簡介&#xff1a;Java領…

(十 五)趣學設計模式 之 命令模式!

目錄 一、 啥是命令模式&#xff1f;二、 為什么要用命令模式&#xff1f;三、 策略模式的實現方式四、 命令模式的優缺點五、 命令模式的應用場景六、 總結 &#x1f31f;我的其他文章也講解的比較有趣&#x1f601;&#xff0c;如果喜歡博主的講解方式&#xff0c;可以多多支…

Matlab 大量接單

分享一個matlab接私活、兼職的平臺 1、技術方向滿足任一即可 2、技術要求 3、最后 技術方向滿足即可 MATLAB&#xff1a;熟練掌握MATLAB編程語言&#xff0c;能夠使用MATLAB進行數據處理、機器學習和深度學習等相關工作。 機器學習、深度學習、強化學習、仿真、復現、算法、…

【自學筆記】大數據基礎知識點總覽-持續更新

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 大數據基礎知識點總覽1. 大數據概述2. 大數據處理技術3. 數據倉庫與數據挖掘4. 大數據分析與可視化5. 大數據平臺與架構6. 大數據安全與隱私 總結 大數據基礎知識點…

17、什么是智能指針,C++有哪幾種智能指針【高頻】

智能指針其實不是指針&#xff0c;而是一個&#xff08;模板&#xff09;類&#xff0c;用來存儲指向某塊資源的指針&#xff0c;并自動釋放這塊資源&#xff0c;從而解決內存泄漏問題。主要有以下四種&#xff1a; auto_ptr 它的思想就是當當一個指針對象賦值給另一個指針對…

CAN總線通信協議學習2——數據鏈路層之幀格式

1 幀格式 幀格式可理解為定義了傳輸的數據&#xff08;叫報文&#xff09;應該“長什么樣”來傳輸&#xff0c;也為后續設定一些規則如錯誤檢查機制提供了思路。 首先&#xff0c;幀格式可分為以下5種類型&#xff1a; PS&#xff1a;CAN總線任意一個設備可當收也可當發&#…

MATLAB中asManyOfPattern函數用法

目錄 語法 說明 示例 匹配盡可能多的模式實例 指定要匹配的最小模式數 指定要匹配的最小和最大模式數 asManyOfPattern函數的功能是模式匹配次數盡可能多。 語法 newpat asManyOfPattern(pat) newpat asManyOfPattern(pat,minPattern) newpat asManyOfPattern(pat,m…

1×1卷積的作用與原理詳解

11卷積的作用與原理詳解 文章目錄 11卷積的作用與原理詳解引言1. 什么是11卷積&#xff1f;2. 11卷積的數學表達3. 11卷積的主要作用3.1 改變通道數&#xff08;升維/降維&#xff09;3.1.1 降維&#xff08;Dimension Reduction&#xff09;3.1.2 升維&#xff08;Dimension I…

網絡配置的基本信息

目錄 一、網絡接口信息 1、關閉虛擬化服務 2、配置臨時IP 3、配置靜態IP 4、常見網絡命令 5、安裝Wireshark 一、網絡接口信息 輸入 ip address&#xff0c;會出現下面的內容 網卡名稱及其含義&#xff1a; 網卡名稱說明lo 表示本地回環地址。 ens32 有線網卡&#xff0c…

dify綁定飛書多維表格

dify 綁定飛書和綁定 notion 有差不多的過程&#xff0c;都需要套一層應用的殼子&#xff0c;而沒有直接可以訪問飛書文檔的 API。本文記錄如何在dify工具中使用新增多條記錄工具。 創建飛書應用 在飛書開放平臺創建一個應用&#xff0c;個人用戶創建企業自建應用。 自定義應…