python多執行緒
gil blablabla concurrent blablabla
簡單地說就是作為可能是僅有的支援多執行緒的解釋型語言(perl的多執行緒是殘疾,php沒有多執行緒),python的多執行緒是有compromise的,在任意時間只有乙個python直譯器在解釋python bytecode。
如果你的**是cpu密集型,多個執行緒的**很有可能是線性執行的。所以這種情況下多執行緒是雞肋,效率可能還不如單執行緒因為有context switch
但是:如果你的**是io密集型,多執行緒可以明顯提高效率。例如製作爬蟲(我就不明白為什麼python總和爬蟲聯絡在一起…不過也只想起來這個例子…),絕大多數時間爬蟲是在等待socket返回資料。這個時候c**裡是有release gil的,最終結果是某個執行緒等待io的時候其他執行緒可以繼續執行。
反過來講:你就不應該用python寫cpu密集型的**…效率擺在那裡…
如果確實需要在cpu密集型的**裡用concurrent,就去用multiprocessing庫。這個庫是基於multi process實現了類multi thread的api介面,並且用pickle部分地實現了變數共享。
再加一條,如果你不知道你的**到底算cpu密集型還是io密集型,教你個方法:
multiprocessing這個module有乙個dummy的sub module,它是基於multithread實現了multiprocessing的api。
假設你使用的是multiprocessing的pool,是使用多程序實現了concurrency
常用測試理論知識點
1 軟體測試的意義 檢測軟體是否滿足客戶需求?找出軟體中存在的各種問題?滿足客戶提出的測試報告需求?要進入某個市場或某些領域必須做相應的測試 2 軟體測試的常用方法 從執行狀態看 靜態測試 動態測試 從執行過程看 手工測試 自動化測試 從內容劃分看 功能測試 易用性測試 相容性測試 文件測試 從用例...
資料庫理論知識點 一
1.1 資料庫庫系統概述 機器世界的資料模型 按計算機系統的觀點來組織資料,主要是描述資料的結構約束,而非資料本身的內涵 資訊世界的基本概念 聯絡 概念模型的表示方法 邏輯模型 常用邏輯模型 關係模型 值 模式外模式 內模式 資料庫系統的兩級映像 bscs 分布式結構 地理上分散,邏輯上集中的資料庫...
python的重點 python知識點
author lei import os os.path.join 將分離的部分合成乙個整體 filename os.path.join home ubuntu python coding split func print filename 輸出為 home ubuntu python coding...