天天看點

python 程序 線程 攜程_程序、線程和攜程的通俗解釋【劉新宇Python】

通過下面這張圖你就能看清楚了,程序、線程和攜程的關系

程序:

多個程序是可以運作在多個CPU當中的,比如你的電腦是4核,可以同時并行運作四個程序,這是真正實體上的并行運作。

線程:

每個程序又可以有多個線程,線程是輪詢執行的,因為輪詢的速度很快,是以可以看成是并行。

微線程:

攜程是微線程,一個線程可以分為多個攜程,同樣也是輪詢執行,這樣的好處是減少CPU的資源消耗,一些比較多而且小的事件可以用攜程去處理,減少資源的開銷。

python 程式 線程 攜程_程式、線程和攜程的通俗解釋【劉新宇Python】

協程原理

生成器器

def fun1():

print(100)

print(200)

yield # 暫停代碼 儲存斷點狀态

print(100)

print(100)

yield

eventlet

print(100)

print(100)

def fun2():

print(100)

print(200)

yield

print(100)

print(100)

yield

print(100)

print(100)

gen_obj1 = fun1() # 建立了生成器器對象

gen_obj2 = fun2()

next(gen_obj1)

next(gen_obj2)

next(gen_obj1)

next(gen_obj2)

通常采用協程庫(擴充庫)來完成協程開發

協程庫能夠自動幫助完成協程的執行切換

eventlet

from multiprocessing import Process

p = Processs()

p.start()

from threading import Thread

t = Thread()

t.start()

from eventlet import Eventlet

e1 = Eventlet()

e1.start()

e2 = Eventlet()

e2.start()

協程運行socketio伺服器器的⽅方式

pip install eventlet

import eventlet

eventlet.monkey_patch()

import socketio

import eventlet.wsgi

# Server對象理理解為Flask⾥裡里⾯面的應⽤用對象就可以

# sio對象是⽤用來管理理socketio即時通訊業務的

sio = socketio.Server(async_mode='eventlet') #

指明在evenlet模式下

app = socketio.Middleware(sio)

eventlet.wsgi.server(eventlet.listen(('',

8000)), app)