Twisted是基于事件驅(qū)動(dòng)的網(wǎng)絡(luò)引擎框架,支持Python2.7和3.3+。它包括很多不同的模塊,如:
twisted.web:HTTP客戶和服務(wù)端,HTML模板,和一個(gè)WSGI服務(wù)器
twisted.conch:基于SSHv2和Telnet協(xié)議的的客戶端,服務(wù)器和終端模擬器
twisted.words:基于IRC,XMPP和其他IM協(xié)議的客戶端和服務(wù)器
twisted.mail:基于IMAPv4,POP3,SMTP的客戶端和服務(wù)器
twisted.positioning:和NMEA(國(guó)際海上電子協(xié)會(huì))兼容的GPS接收者通信的工具
twisted.names:DNS客戶端和工具可用于構(gòu)建自己的DNS服務(wù)器
twisted.trial:和基于Twisted的代碼高度整合的單元測(cè)試框架
twisted支持所有主流的事件輪詢機(jī)制:select(所有平臺(tái))、poll(大部分POSIX平臺(tái))、epoll(Linux)、kqueue(FreeBSD,OSX)、OCP(Windows)和各種GUI事件輪詢機(jī)制(GTK+2/3、QT、wxWidgets)。第三方的reactors也可以加入到twisted中來支持額外的事件輪詢機(jī)制。
Python3.7中使用twisted庫卻會(huì)用到"SyntaxError: invalid syntax"(語法錯(cuò)誤)
提示語法錯(cuò)誤的位置并不在我們寫的代碼,而是在我們下載的第三方庫中。通過上網(wǎng)查找,發(fā)現(xiàn)提示這個(gè)錯(cuò)誤跟py3.7的新特性有關(guān)。
在py3.5時(shí)提出的PEP492提案在py3.7中正式生效。(以前的版本中也有,但是得
from __future__ import generator_stop
)之前寫異步協(xié)程時(shí)我們會(huì)用到名為asyncio的標(biāo)準(zhǔn)庫。
python也是在python 3.4中引入了協(xié)程的概念。
Py3.5的提案中,有一條就是:將協(xié)程的概念從生成器中拎了出來,并添加了新的關(guān)鍵詞async\await。
async/await 關(guān)鍵字:python3.5用于定義協(xié)程的關(guān)鍵字,async定義一個(gè)協(xié)程,await用于掛起阻塞的異步調(diào)用接口。
SyntaxError: invalid syntax
語法錯(cuò)誤的原因在于async是py37的關(guān)鍵詞,不能作為關(guān)鍵字參數(shù)。修改方法也很簡(jiǎn)單,把報(bào)錯(cuò)的文件中全部的async修改為其他非py37關(guān)鍵詞的名稱。
Pyspider、scrapy語法錯(cuò)誤就是這個(gè)原因,改一下源文件里的async