Home  >  Q&A  >  body text

关于python中gevent的问题

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 '--------------------------------------------------------------------------------'


高洛峰高洛峰2819 days ago439

reply all(1)I'll reply

  • 三叔

    三叔2016-10-27 13:32:08

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

    reply
    0
  • Cancelreply