# -*- coding: utf-8 -*-
import gevent
def f1():
for i in range(5):
print 'run func: f1, index: %s ' % i
gevent.sleep(0)
def f2():
for i in range(5):
print 'run func: f2, index: %s ' % i
gevent.sleep(0)
t1 = gevent.spawn(f1)
t2 = gevent.spawn(f2)
gevent.joinall([t1, t2])
给程序打补丁
import gevent
import time
from gevent import monkey
# 打补丁,让gevent框架识别耗时操作,比如:time.sleep,网络请求延时
monkey.patch_all()
# 任务1
def work1(num):
for i in range(num):
print("work1....")
time.sleep(0.2)
# gevent.sleep(0.2)
# 任务1
def work2(num):
for i in range(num):
print("work2....")
time.sleep(0.2)
# gevent.sleep(0.2)
if __name__ == '__main__':
# 创建协程指定对应的任务
g1 = gevent.spawn(work1, 3)
g2 = gevent.spawn(work2, 3)
# 主线程等待协程执行完成以后程序再退出
g1.join()
g2.join()
获取返回结果
g_list = list()
for stock in stocks:
dbname = 'daily_data_sz' if stock[0].endswith('.SZ') else 'daily_data_sh'
# get_daily_data 是一个函数,后边的都是此函数所需参数
g = gevent.spawn(get_daily_data, pro, stock, end_date, dbname, engine)
g_list.append(g) # g是一个Greenlet对象
gevent.joinall(g_list)
for i, g in enumerate(g_list):
print(i)
print(g.value)
设置超时
import gevent
import gevent.monkey
import urllib
gevent.monkey.patch_all()
def test():
#就这么用,7是超时时间,后面的False表示不抛出其他异常了!
with gevent.Timeout(7, False) as timeout:
urllib.urlopen("http://www.twitter.com")
if __name__ == "__main__":
g = gevent.spawn(test)
g.join()