原创 進程間的數據通信與數據共享

進程彼此之間互相隔離,要實現進程間通信(IPC),multiprocessing模塊支持兩種形式:隊列和管道,這兩種方式都是使用消息傳遞的進程通信隊列import multiprocessing def run(q): q.pu

原创 多線程

多線程Threading多線程之間的資源是共享的,多線程之間是併發的多線程的實現import threading import time def music(name): print('%s begin to listen to

原创 客戶端/服務器架構

基於TCP套接字先從服務器端說起。服務器端先初始化Socket,然後與端口綁定(bind),對端口進行監聽(listen),調用accept阻塞,等待客戶端連接。在這時如果有個客戶端初始化一個Socket,然後連接服務器(connect)

原创 類的裝飾器

裝飾可以是一個函數class Type: def __init__(self,key,type): self.key=key

原创 描述符

描述符的本質就是新式類,其至少實現了__get__(),__set__(),__delete__()中的一個,也被稱爲描述符協議;__get__():在調用一個屬性時,觸發__set__():在爲一個屬性賦值時,觸發__delete__(

原创 上下文管理協議

__enter與__exit__class Open: def __init__(self,name): self.name=name def __enter__(self): print(

原创

Python的GIL:全局解釋鎖(Global Interpreter Lock)在執行多線程時,同一時刻至多隻有一個線程被CPU執行,如果要實現並行可以使用多進程。Python適用於IO密集型情況,不太適用於計算密集型的場景,因爲執行計

原创 同步對象與信號量

同步對象Eventimport threading import time class Boss(threading.Thread): def run(self): print('Boss:加班到<22:00>')

原创 粘包

參考點擊打開鏈接Socket收發消息原理發送端將要發送的信息存進緩存中,然後通過物理層,傳輸到接收端的緩存中,當程序要讀取信息時再從自己的緩存中取。發送端可以是一K一K地發送數據,而接收端的應用程序可以兩K兩K地提走數據,當然也有可能一次

原创 Socketserver

socketserver模塊能實現TCP的併發,其中主要包括兩大類1.server類:負責鏈接["BaseServer","TCPServer","UDPServer","ThreadingUDPServer","ThreadingTCP

原创 隊列

隊列queueq.put方法用以插入數據到隊列中,put方法還有兩個可選參數:blocked和timeout。如果blocked爲True(默認值),並且timeout爲正值,該方法會阻塞timeout指定的時間,直到該隊列有剩餘的空間。

原创 IO

參考:點擊打開鏈接對於一個network IO (這裏我們以read舉例),它會涉及到兩個系統對象,一個是調用這個IO的process (or thread),另一個就是系統內核(kernel)。當一個read操作發生時,該操作會經歷兩個

原创 協程

協程:是單線程下的併發,又稱微線程,纖程。英文名Coroutine。一句話說明什麼是線程:協程是一種用戶態的輕量級線程,即協程是由用戶程序自己控制調度的。協程的本質就是在單線程下,由用戶自己控制一個任務遇到io阻塞了就切換另外一個任務去執

原创 多進程

與線程不同,進程沒有任何共享狀態,進程修改的數據,改動僅限於該進程內,多進程間的資源是相互獨立的,多進程是並行的多進程的實現與多線程類似注意:在windows中Process()必須放到# if __name__ == '__main__

原创 數據分析之Numpy

基礎 import numpy as np # 一. 創建array # array中的元素除了數字還可以是字符串和布爾值 date1 = [6.5, 2, 5, 4] a = np.array(date1) b = np.ara