download方法的调用都在一个线程吗?这段代码能保证bodys线程安全吗?
from gevent import monkey; monkey.patch_all() import gevent import requests def dowload(page, bodys): body = requests.get("http://baidu.com").content bodys.append(body) print "------>", page a = 0 while True: arr = [] bodys = [] for i in range(100): g = gevent.spawn(dowload, i, bodys) arr.append(g) for g in arr: g.join() for body in bodys: # do sometime pass print '--------------------------------------------------------------------------------'
三叔2016-10-27 13:32:08
1.gevent是一个基于协程的网络库
2.这里的bodys变量有写入操作,可能会有写入顺序不一样的问题,但是由于本身就只有一个线程在执行,不会存在两个协程同时读写同一个对象,协程是交互执行的,所以我认为线程和协程上都是安全的