導航:首頁 > 編程語言 > python流式處理

python流式處理

發布時間:2023-01-24 10:51:55

python網路編程 -- TCP/IP

首先放出一個 TCP/IP 的程序,這里是單線程伺服器與客戶端,在多線程一節會放上多線程的TCP/IP服務程序。

這里將服務端和客戶端放到同一個程序當中,方便對比服務端與客戶端的不同。

TCP/IP是網際網路的通信協議,其參考OSI模型,也採用了分層的方式,對每一層制定了相應的標准。

網際協議(IP)是為全世界通過互聯網連接的計算機賦予統一地址系統的機制,它使得數據包能夠從互聯網的一端發送至另一端,如 130.207.244.244,為了便於記憶,常用主機名代替IP地址,例如 .com。

UDP (User Datagram Protocol,用戶數據報協議) 解決了上述第一個問題,通過埠號來實現了多路復用(用不同的埠區分不同的應用程序)但是使用UDP協議的網路程序需要自己處理丟包、重包和包的亂序問題。

TCP (Transmission Control Protocol,傳輸控制協議) 解決了上述兩個問題,同樣使用埠號實現了復用。

TCP 實現可靠連接的方法:

socket通信模型及 TCP 通信過程如下兩張圖。

[圖片上傳失敗...(image-6d947d-1610703914730)]

[圖片上傳失敗...(image-30b472-1610703914730)]

socket.getaddrinfo(host, port, family, socktype, proto, flags)
返回: [(family, socktype, proto, cannonname, sockaddr), ] 由元組組成的列表。
family:表示socket使用的協議簇, AF_UNIX : 1, AF_INET: 2, AF_INET6 : 10。 0 表示不指定。
socktype: socket 的類型, SOCK_STREAM : 1, SOCK_DGRAM : 2, SOCK_RAW : 3
proto: 協議, 套接字所用的協議,如果不指定, 則為 0。 IPPROTO_TCP : 6, IPPRTOTO_UDP : 17
flags:標記,限制返回內容。 AI_ADDRCONFIG 把計算機無法連接的所有地址都過濾掉(如果一個機構既有IPv4,又有IPv6,而主機只有IPv4,則會把 IPv6過濾掉)
AI _V4MAPPED, 如果本機只有IPv6,服務卻只有IPv4,這個標記會將 IPv4地址重新編碼為可實際使用的IPv6地址。
AI_CANONNAME,返回規范主機名:cannonname。
getaddrinfo(None, 'smtp', 0, socket.SOCK_STREAM, 0, socket.AP_PASSIVE)
getaddrinfo('ftp.kernel.org', 'ftp', 0, 'socket.SOCK_STREAM, 0, socket.AI_ADDRCONFIG | socket.AI_V4MAPPED)
利用已經通信的套接字名提供給getaddrinfo
mysock = server_sock.accept()
addr, port = mysock.getpeername()
getaddrinfo(addr, port, mysock.family, mysock.type, mysock.proto, socket.AI_CANONNAME)

TCP 數據發送模式:

由於 TCP 是發送流式數據,並且會自動分割發送的數據包,而且在 recv 的時候會阻塞進程,直到接收到數據為止,因此會出現死鎖現象,及通信雙方都在等待接收數據導致無法響應,或者都在發送數據導致緩存區溢出。所以就有了封幀(framing)的問題,即如何分割消息,使得接收方能夠識別消息的開始與結束。

關於封幀,需要考慮的問題是, 接收方何時最終停止調用recv才是安全的?整個消息或數據何時才能完整無缺的傳達?何時才能將接收到的消息作為一個整體來解析或處理。

適用UDP的場景:

由於TCP每次連接與斷開都需要有三次握手,若有大量連接,則會產生大量的開銷,在客戶端與伺服器之間不存在長時間連接的情況下,適用UDP更為合適,尤其是客戶端太多的時候。

第二種情況: 當丟包現象發生時,如果應用程序有比簡單地重傳數據聰明得多的方法的話,那麼就不適用TCP了。例如,如果正在進行音頻通話,如果有1s的數據由於丟包而丟失了,那麼只是簡單地不斷重新發送這1s的數據直至其成功傳達是無濟於事的。反之,客戶端應該從傳達的數據包中任意選擇一些組合成一段音頻(為了解決這一問題,一個智能的音頻協議會用前一段音頻的高度壓縮版本作為數據包的開始部分,同樣將其後繼音頻壓縮,作為數據包的結束部分),然後繼續進行後續操作,就好像沒有發生丟包一樣。如果使用TCP,那麼這是不可能的,因為TCP會固執地重傳丟失的信息,即使這些信息早已過時無用也不例外。UDP數據報通常是互聯網實時多媒體流的基礎。

參考資料:

Ⅱ python數據分析用什麼軟體

Python是數據處理常用工具,可以處理數量級從幾K至幾T不等的數據,具有較高的開發效率和可維護性,還具有較強的通用性和跨平台性,這里就為大家分享幾個不錯的數據分析工具。Python數據分析需要安裝的第三方擴展庫有:Numpy、Pandas、SciPy、Matplotpb、Scikit-Learn、Keras、Gensim、Scrapy等,以下是第三方擴展庫的簡要介紹:(推薦學習:Python視頻教程)
1. Pandas
Pandas是Python強大、靈活的數據分析和探索工具,包含Series、DataFrame等高級數據結構和工具,安裝Pandas可使Python中處理數據非常快速和簡單。
Pandas是Python的一個數據分析包,Pandas最初被用作金融數據分析工具而開發出來,因此Pandas為時間序列分析提供了很好的支持。
Pandas是為了解決數據分析任務而創建的,Pandas納入了大量的庫和一些標準的數據模型,提供了高效的操作大型數據集所需要的工具。Pandas提供了大量是我們快速便捷的處理數據的函數和方法。Pandas包含了高級數據結構,以及讓數據分析變得快速、簡單的工具。它建立在Numpy之上,使得Numpy應用變得簡單。
帶有坐標軸的數據結構,支持自動或明確的數據對齊。這能防止由於數據結構沒有對齊,以及處理不同來源、採用不同索引的數據而產生的常見錯誤。
使用Pandas更容易處理丟失數據。合並流行資料庫(如:基於SQL的資料庫)Pandas是進行數據清晰/整理的最好工具。
2. Numpy
Python沒有提供數組功能,Numpy可以提供數組支持以及相應的高效處理函數,是Python數據分析的基礎,也是SciPy、Pandas等數據處理和科學計算庫最基本的函數功能庫,且其數據類型對Python數據分析十分有用。
Numpy提供了兩種基本的對象:ndarray和ufunc。ndarray是存儲單一數據類型的多維數組,而ufunc是能夠對數組進行處理的函數。Numpy的功能:
N維數組,一種快速、高效使用內存的多維數組,他提供矢量化數學運算。可以不需要使用循環,就能對整個數組內的數據進行標准數學運算。非常便於傳送數據到用低級語言編寫(CC++)的外部庫,也便於外部庫以Numpy數組形式返回數據。
Numpy不提供高級數據分析功能,但可以更加深刻的理解Numpy數組和面向數組的計算。
3. Matplotpb
Matplotpb是強大的數據可視化工具和作圖庫,是主要用於繪制數據圖表的Python庫,提供了繪制各類可視化圖形的命令字型檔、簡單的介面,可以方便用戶輕松掌握圖形的格式,繪制各類可視化圖形。
Matplotpb是Python的一個可視化模塊,他能方便的只做線條圖、餅圖、柱狀圖以及其他專業圖形。 使用Matplotpb,可以定製所做圖表的任一方面。他支持所有操作系統下不同的GUI後端,並且可以將圖形輸出為常見的矢量圖和圖形測試,如PDF SVG JPG PNG BMP GIF.通過數據繪圖,我們可以將枯燥的數字轉化成人們容易接收的圖表。 Matplotpb是基於Numpy的一套Python包,這個包提供了吩咐的數據繪圖工具,主要用於繪制一些統計圖形。 Matplotpb有一套允許定製各種屬性的默認設置,可以控制Matplotpb中的每一個默認屬性:圖像大小、每英寸點數、線寬、色彩和樣式、子圖、坐標軸、網個屬性、文字和文字屬性。
4. SciPy
SciPy是一組專門解決科學計算中各種標准問題域的包的集合,包含的功能有最優化、線性代數、積分、插值、擬合、特殊函數、快速傅里葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算等,這些對數據分析和挖掘十分有用。
Scipy是一款方便、易於使用、專門為科學和工程設計的Python包,它包括統計、優化、整合、線性代數模塊、傅里葉變換、信號和圖像處理、常微分方程求解器等。Scipy依賴於Numpy,並提供許多對用戶友好的和有效的數值常式,如數值積分和優化。
Python有著像Matlab一樣強大的數值計算工具包Numpy;有著繪圖工具包Matplotpb;有著科學計算工具包Scipy。 Python能直接處理數據,而Pandas幾乎可以像SQL那樣對數據進行控制。Matplotpb能夠對數據和記過進行可視化,快速理解數據。Scikit-Learn提供了機器學習演算法的支持,Theano提供了升讀學習框架(還可以使用CPU加速)。
5. Keras
Keras是深度學習庫,人工神經網路和深度學習模型,基於Theano之上,依賴於Numpy和Scipy,利用它可以搭建普通的神經網路和各種深度學習模型,如語言處理、圖像識別、自編碼器、循環神經網路、遞歸審計網路、卷積神經網路等。
6. Scikit-Learn
Scikit-Learn是Python常用的機器學習工具包,提供了完善的機器學習工具箱,支持數據預處理、分類、回歸、聚類、預測和模型分析等強大機器學習庫,其依賴於Numpy、Scipy和Matplotpb等。
Scikit-Learn是基於Python機器學習的模塊,基於BSD開源許可證。 Scikit-Learn的安裝需要Numpy S Matplotpb等模塊,Scikit-Learn的主要功能分為六個部分,分類、回歸、聚類、數據降維、模型選擇、數據預處理。
Scikit-Learn自帶一些經典的數據集,比如用於分類的iris和digits數據集,還有用於回歸分析的boston house prices數據集。該數據集是一種字典結構,數據存儲在.data成員中,輸出標簽存儲在.target成員中。Scikit-Learn建立在Scipy之上,提供了一套常用的機器學習演算法,通過一個統一的介面來使用,Scikit-Learn有助於在數據集上實現流行的演算法。 Scikit-Learn還有一些庫,比如:用於自然語言處理的Nltk、用於網站數據抓取的Scrappy、用於網路挖掘的Pattern、用於深度學習的Theano等。
7. Scrapy
Scrapy是專門為爬蟲而生的工具,具有URL讀取、HTML解析、存儲數據等功能,可以使用Twisted非同步網路庫來處理網路通訊,架構清晰,且包含了各種中間件介面,可以靈活的完成各種需求。
8. Gensim
Gensim是用來做文本主題模型的庫,常用於處理語言方面的任務,支持TF-IDF、LSA、LDA和Word2Vec在內的多種主題模型演算法,支持流式訓練,並提供了諸如相似度計算、信息檢索等一些常用任務的API介面。
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關於python數據分析用什麼軟體的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!

閱讀全文

與python流式處理相關的資料

熱點內容
一個男的看女生洗澡電影 瀏覽:291
虛擬幣充值源碼 瀏覽:87
我昨天看了航天電影英文翻譯 瀏覽:175
熙和宇電影高級家庭 瀏覽:236
主角10歲收了母親的小說 瀏覽:544
女獄電影日本 瀏覽:154
二龍湖浩哥最早的作品 瀏覽:699
異界收母入後宮 瀏覽:155
ida反編譯出來的代碼是匯編指令嗎 瀏覽:820
小孩子是天才的電影 瀏覽:450
輿情監控演算法 瀏覽:147
好看123電影 瀏覽:751
成龍主演的五行拳電影名字 瀏覽:954
好看的中文字幕經典 瀏覽:913
android仿qq輸入 瀏覽:117
看輕小說的網站 瀏覽:86
命令與征服3戰役存檔 瀏覽:147
台灣風月影片 瀏覽:326
彭偶么電視劇電影大全 瀏覽:291
重生井岡山林楓 瀏覽:519