简介
Twisted是一个基于Reactor模式的异步IO网络框架,利用循环体来等待事件,从而实现异步编程和非阻塞IO,利用
deferred
来管理回调函数。
应用举例
使用DeferredList管理
from twisted.web.client import getPage, defer
from twisted.internet import reactor
def all_done():
"""
停止reactor事件循环
:return:
"""
reactor.stop()
def error_back(e):
print(e)
def parse_page(res):
"""
定义回调函数
:param res:
:return:
"""
print(res)
return True
defer_list = []
urls = [
'https://www.xx.org',
'http://www.baidu.com',
'http://www.qq.com'
]
for url in urls:
# getPage会返回一个deferred对象
obj = getPage(url.encode('utf-8'))
# 给Deferred对象添加回调
obj.addCallback(parse_page)
# 给Deferred添加错误回调
obj.addErrback(error_back)
# 将Deferred对象添加到列表中
defer_list.append(obj)
# 任务列表结束后,无论成败都调用reactor.stop()停止
defer.DeferredList(defer_list).addBoth(all_done)
# 启动事件循环监听
reactor.run()
getPage发送POST请求
from twisted.internet import reactor
from twisted.web.client import getPage
import urllib.parse
def one_done(arg):
"""
停止循环体
:param arg:
:return:
"""
print(arg)
reactor.stop()
post_data = urllib.parse.urlencode({'username': 'abc'})
post_data = bytes(post_data, encoding='utf8')
headers = {b'Content-Type': b'application/x-www-form-urlencoded'}
# getPage返回deferred,deferred用来管理回调
response = getPage(bytes('http://test/login', encoding='utf8'),
method=bytes('POST', encoding='utf8'),
postdata=post_data,
cookies={},
headers=headers)
# 请求正常或异常都调用one_done
response.addBoth(one_done)
# 启动循环体
reactor.run()