python 協程

small_caier發表於2019-01-25

協程: 協程是一種使用者態的輕量級執行緒, 即協程是由使用者程式自己控制排程的

1.Greenlet

import time
# import greenlet
from greenlet import greenlet
def f1(s):
    print(`第一次f1`+s)
    g2.switch(`taibai`)  #切換到g2這個物件的任務去執行
    time.sleep(1)
    print(`第二次f1`+s)
    g2.switch()
def f2(s):
    print(`第一次f2`+s)
    g1.switch()
    time.sleep(1)
    print(`第二次f2`+s)
g1 = greenlet(f1)  #例項化一個greenlet物件,並將任務名稱作為引數參進去
g2 = greenlet(f2)
g1.switch(`alex`) #執行g1物件裡面的任務

2.Gevent

import gevent
from gevent import monkey;monkey.patch_all()
import time
import threading

def f1():
    print(`第一次f1`)
    # print(threading.current_thread().getName())
    # gevent.sleep(1)
    time.sleep(2)
    print(`第二次f1`)

def f2():
    # print(threading.current_thread().getName())
    print(`第一次f2`)
    # gevent.sleep(2)
    time.sleep(2)
    print(`第二次f2`)

s = time.time()
g1 = gevent.spawn(f1) #非同步提交了f1任務
g2 = gevent.spawn(f2) #非同步提交了f2任務
# g1.join()
# g2.join()
gevent.joinall([g1,g2])
e = time.time()
print(`執行時間:`,e-s)
print(`主程式任務`)

 

相關文章