协程
def consumer(): while True: x = yield print('处理了数据:',x) def producer(): c = consumer() next(c) for i in range(10): print('生产了数据:',i) c.send(i) producer()
from greenlet import greenlet def eat(): print('eating start') g2.switch() print('eating end') g2.switch() def play(): print('playing start') g1.switch() print('playing end') g1 = greenlet(eat) g2 = greenlet(play) g1.switch()
from gevent import monkey;monkey.patch_all() import time import gevent def eat(): print('eating start') time.sleep(1) print('eating end') def play(): print('playing start') time.sleep(1) print('playing end') g1 = gevent.spawn(eat) g2 = gevent.spawn(play) g1.join() g2.join()
from gevent import monkey;monkey.patch_all() import time import gevent import threading def eat(): print(threading.currentThread().getName()) print('eating start') time.sleep(1) print('eating end') def play(): print(threading.currentThread().getName()) print('playing start') time.sleep(1) print('playing end') g1 = gevent.spawn(eat) g2 = gevent.spawn(play) g1.join() g2.join()
from gevent import monkey;monkey.patch_all() import time import gevent import threading def task(): time.sleep(1) print(123456) def sync(): for i in range(10): task() def async(): g_lst = [] for i in range(10): g = gevent.spawn(task) g_lst.append(g) gevent.joinall(g_lst) # sync() async()
from gevent import monkey;monkey.patch_all() from urllib.request import urlopen import gevent def get_url(url): response = urlopen(url) content = response.read().decode('utf-8') return len(content) g1 = gevent.spawn(get_url,'http://www.baidu.com') g2 = gevent.spawn(get_url,'http://www.sogou.com') g3 = gevent.spawn(get_url,'http://www.taobao.com') g4 = gevent.spawn(get_url,'http://www.hao123.com') g5 = gevent.spawn(get_url,'http://www.cnblogs.com') gevent.joinall([g1,g2,g3,g4,g5]) print(g1.value) print(g2.value) print(g3.value) print(g4.value) print(g5.value)
from gevent import monkey;monkey.patch_all() import socket import gevent def talk(conn): conn.send(b'hello') print(conn.recv(1024).decode('utf-8')) conn.close() sk = socket.socket() sk.bind(('',8080)) sk.listen() while True: conn,addr = sk.accept() gevent.spawn(talk,conn) sk.close()