日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python twisted教程一,异步编程

發布時間:2025/3/15 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python twisted教程一,异步编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

最近有人在twisted郵件列表中問有沒有一個可以讓人快速學習twisted的文檔.總體的來說:這個系列不是這樣的一個文檔.如果你沒有很多時間或者耐心的話,這個系列的文章不太適合你.

不過,如果你對異步編程了解很少的話,相信一個簡短的介紹也不讓你完全明白,當然如果你是天才除外.我學習和使用twisted已經好幾年了,通過這幾年的學習和工作我得出的結論就是:學習twisted困難的地方就是對異步編程的理解而不是怎樣去用twisted 的函數去寫代碼. twisted 的代碼寫的都很簡潔和清晰,而且有很好的注釋和文檔,但是如果沒有理解異步編程的思想而直接去讀twisted 的源碼的話會讓你有twisted 的感覺.

這個系列的第一篇會講異步編程,后面的章節才會降到twisted.首先讓我們以一個簡單的實例來說明異步編程是怎么工作的吧.

模型

為了更好的理解異步模型,我們先來回顧一下我們經常遇到的一些模型:同步模型和多線程模型.讓我們假想一個程序要完成三個任務,先讓我們看看同步模型是怎么來工作的,如下圖,

圖片一

這個是最簡單的執行任務的方式,也是我們在平常寫程序的時候經常用到的,完成一項工作之后再去做另外一件事情,每次只執行一項任務.

我們可以比較同步模型多線程模型,如下圖:

?

圖片二

在這種模型當中,每一個任務被分配在單獨的線程當中工作,多個任務可以同時進行,這種模型下,每個任務是被認為是獨立的.但是在現實中,很多時候每個線程并不是獨立,在運行的過程中需要從其他的線程中去獲取結果,這樣就使各個進行的交互和協作變得復雜,在一個大的系統中,進程之間的交互會更復雜.

最后是我們要講的異步模型.如下圖

圖片三

在異步模型中,每個任務進行交替進行,但是仍在一個進程中.異步模型會比多線程模型更簡單些,因為每個任務的運行狀態都是可以被我們控制的.雖然在同步模型也可以讓任務交替運行,但這往往需要多個線程協作才能完成.單線程異步模式可以保證程序運行在一個線程中,即使在一個多進程系統中.

異步模型和多線程模型還有一個不同的地方是,多線程除了程序的控制之外,還受到操作系統的控制.

相反的在一個異步模型的程序中,一個任務會一直運行下去,直到任務被運行完或者程序暫停這個任務而去執行令一個任務.

重要的一點是,在異步模型可以多線程模型可以很好結合起來,但在這個系列教程中我們還只涉及到異步模型.

為什么(為毛)

從上面的講解中我們可以看到異步模型比多線程模型更簡單些,因為異步模型只有一個進程而且任務的停止和運行狀態是可控的.但比同步模型相比還是比較復雜,程序員必須把每一個任務分成很多步然后再有序的把他們組合起來,如果一個任務用到了令一個任務的結果,這個任務需要接受另一個任務的輸出做為他自己的輸入,而且這種接收的數據經常是一段一段的而不是一個整體. 你不禁要問既然異步模型和同步模型都是一個線程,他們執行相同的任務應該花費相同的時間啊,甚至比同步模型花費的時間更多,為什么要才采用異步的模型呢?

這里最少有兩個原因,第一,如果多個任務中的一個任務負責實現一個人機交互接口,在等待用戶輸入的時候,可以讓其他的任務先去執行,等用戶輸入時再去處理用戶的輸入.

所以如果說異步模型比同步模型快的話是有條件限制的,如果你的程序中會有阻塞,或者被強迫等待,異步模型會是你的選擇.同步模型在有阻塞的時候的執行過程應該是這樣的

圖片四

在這個圖中灰色的部分代表了一個任務正在等待(阻塞). 為什么一個任務會被阻塞呢? 一個經常的原因就是等待執行I/O ,傳輸數據. 一般來說CPU 處理數據的速度比磁盤和網絡塊,因此當一個同步的程序要處理很多I/O時會花費很多時間用于等待,這樣的一個同步程序也被叫做”阻塞程序”

注意圖片4,一個阻塞程序,有點像圖片3,一個異步程序.這不是一個巧合,異步模型的設計原理就是,當其中一個任務被阻塞時,可以先去執行其他的可以執行的任務.所以一個異步程序僅僅會在沒有任務可以執行的時候,所以一個異步程序也會被叫做無阻塞程序.如果一個程序中有很多阻塞的任務,異步模型可以比同步模型更高效.

和同步模型相比,異步模型在下列情況時表現更好:
1,有很多任務,經??傆幸粋€任務可以繼續執行的時候
2,這些任務中要執行很多I/O操作
3,這些任務大多都是獨立的

這些情況大都描述了一個非常繁忙的web server,每一個任務代表了一次接收請求和發送結果,而這些client 請求大多都是獨立的,所以一個web server 的實現一個很好的異步模型的實現,這就是twisted被叫做網絡編程庫.

Onward and Upward
這個系列的第一個部分就完啦,在第二部分,我們將寫一些網絡程序,阻塞的和非阻塞的都有,沒有用twisted.讓我們先體會一下一個異步的程序是怎樣運行的.

?

?

?

?

總結

以上是生活随笔為你收集整理的python twisted教程一,异步编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。