python中的協程詳解

協程簡介

定義:纖程,微線程.協程的本質是一個單線程程序,所以攜程不能使用計算機多核資源

作用:能夠高效得完成併發任務,佔用較少的資源.因此協程的併發量較高

原理:

    通過記錄應用層的上下文棧區,實現在運行中進行上下文跳轉,達到可以選擇性地運行想要運行的部分,以此提高程序的運行效率.

優點:消耗資源少 無需切換開銷 無需同步互斥 IO併發性好

缺點:無法利用計算機多核

greenlet.greenlet() 生成協程對象

import greenlet

def test1():
    print(12)
    gr2.switch()
    print(34)
    gr2.switch()


def test2():
    print(56)
    gr1.switch()
    print(78)


#協程對象
gr1 = greenlet.greenlet(test1)
gr2 = greenlet.greenlet(test2)

gr1.switch()

#運行結果
'''
12
56
34
78
'''

gevent介紹

gevent將協程事件封裝爲函數
python中用 f= gevent.spawn(target,args)來參加協程。其中target爲協程調用的方法,args爲方法的參數。示例如下:

import gevent

def foo(a, b):
    print("a = %d,b = %d" % (a, b))
    gevent.sleep(2)
    print("Running foo again")


def bar():
    print("Running int bar")
    gevent.sleep(3)
    print("Running bar again")


#生成協程
f = gevent.spawn(foo, 1, 2)
g = gevent.spawn(bar)
#sleep(3)
print("===============")
gevent.joinall([f, g]) #回收協程
print("%%%%%%%%%%%%%%")

運行結果

===============
a = 1,b = 2
Running int bar
Running foo again
Running bar again
%%%%%%%%%%%%%%

‘’’
注意:設置協程阻塞,讓協程跳轉是gevent.sleep(),而不是time.sleep()
‘’’

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章