scrapy 自动终止事件循环

from twisted.internet import reactor #事件循环 相当于selecet作用 监听是否有连接成功(终止条件,所有的socket对象都被移除。)
from twisted.web.client import getPage #socket对象(如果下载完成,自动从事件循环中移除)
from twisted.internet import defer    #defer.Deferred 特殊的socket对象(不会发请求,目的是不让事件循环结束,可以手动移除。)


#1、利用getPage创建socket对象
#2、将socket对象添加到事件循环中
#3、开始事件循环(内部发送请求,并接受响应,当所有的socket请求完成后,终止事件循环)
def response(content):#回调函数
    print(content)

#表示添加到事件循环中

def task():
    url = 'http://www.baidu.com'
    d = getPage(bytes(url.encode("utf-8")))
    d.addCallback(response)#添加回调函数
    yield d

def stop(*args, **kwargs):
    reactor.stop()


d = task()#开启socket
dd = defer.DeferredList(d)#把socket放到列表中监听
dd.addBoth(stop)#如果socket都完成则调用事件循环结束的函数
reactor.run()#开始事件循环

注意:addCallback()方法C要大写

scrapy 自动终止事件循环