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 '--------------------------------------------------------------------------------'
1.gevent是一个基于协程的网络库
2.这里的
bodys
变量有写入操作,可能会有写入顺序不一样的问题,但是由于本身就只有一个线程在执行,不会存在两个协程同时读写同一个对象,协程是交互执行的,所以我认为线程和协程上都是安全的