代碼:python
import time def A(): while 1: print('------A-----') time.sleep(0.1) yield() def B(): while 1: print('-------B-----') time.sleep(0.1) next(a) a = A() B()
執行結果:服務器
-------B----- ------A----- -------B----- ------A----- -------B----- ------A----- -------B----- ------A----- -------B----- ------A----- ···
上代碼:socket
from greenlet import greenlet import time def A(): while 1: print('-------A-------') time.sleep(0.5) g2.switch() def B(): while 1: print('-------B-------') time.sleep(0.5) g1.switch() g1 = greenlet(A) #建立協程g1 g2 = greenlet(B) g1.switch() #跳轉至協程g1
執行結果:spa
-------A------- -------B------- -------A------- -------B------- -------A------- ···
上代碼:線程
import gevent def A(): while 1: print('-------A-------') gevent.sleep(1) #用來模擬一個耗時操做,注意不是time模塊中的sleep def B(): while 1: print('-------B-------') gevent.sleep(0.5) #每當碰到耗時操做,會自動跳轉至其餘協程 g1 = gevent.spawn(A) # 建立一個協程 g2 = gevent.spawn(B) g1.join() #等待協程執行結束 g2.join()
執行結果:code
-------A------- -------B------- -------B------- -------A------- -------B------- -------B------- -------A------- -------B------- -------B------- ···
import gevent from gevent import monkey,socket monkey.patch_all() #有IO才作時須要這一句 s = socket.socket(2,1) #用的都是gevent模塊中的socket,但用法同樣 s.setsockopt(1,2,1) s.bind(('',8080)) s.listen(1024) def func_accept(): while 1: cs,userinfo = s.accept() print('來了一個客戶'+str(userinfo)) g = gevent.spawn(func_recv,cs) #每當有用戶鏈接,增長一條協程 def func_recv(cs): while 1: recv_data = cs.recv(1024) print(recv_data) #程誰堵塞了,便會跳轉至其餘協程 if len(recv_data) > 0: cs.send(recv_data) else: cs.close() break g1 = gevent.spawn(func_accept) g1.join()