py3.7更新PEP492导致的坑点

Twisted是基于事件驱动的网络引擎框架,支持Python2.7和3.3+。它包括很多不同的模块,如:

twisted.web:HTTP客户和服务端,HTML模板,和一个WSGI服务器
twisted.conch:基于SSHv2和Telnet协议的的客户端,服务器和终端模拟器
twisted.words:基于IRC,XMPP和其他IM协议的客户端和服务器
twisted.mail:基于IMAPv4,POP3,SMTP的客户端和服务器
twisted.positioning:和NMEA(国际海上电子协会)兼容的GPS接收者通信的工具
twisted.names:DNS客户端和工具可用于构建自己的DNS服务器
twisted.trial:和基于Twisted的代码高度整合的单元测试框架

twisted支持所有主流的事件轮询机制:select(所有平台)、poll(大部分POSIX平台)、epoll(Linux)、kqueue(FreeBSD,OSX)、OCP(Windows)和各种GUI事件轮询机制(GTK+2/3、QT、wxWidgets)。第三方的reactors也可以加入到twisted中来支持额外的事件轮询机制。

Python3.7中使用twisted库却会用到"SyntaxError: invalid syntax"(语法错误)
提示语法错误的位置并不在我们写的代码,而是在我们下载的第三方库中。通过上网查找,发现提示这个错误跟py3.7的新特性有关。

在py3.5时提出的PEP492提案在py3.7中正式生效。(以前的版本中也有,但是得

from __future__ import generator_stop

)之前写异步协程时我们会用到名为asyncio的标准库。

python也是在python 3.4中引入了协程的概念。

Py3.5的提案中,有一条就是:将协程的概念从生成器中拎了出来,并添加了新的关键词async\await。
async/await 关键字:python3.5用于定义协程的关键字,async定义一个协程,await用于挂起阻塞的异步调用接口。

SyntaxError: invalid syntax

语法错误的原因在于async是py37的关键词,不能作为关键字参数。修改方法也很简单,把报错的文件中全部的async修改为其他非py37关键词的名称。
Pyspider、scrapy语法错误就是这个原因,改一下源文件里的async

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文链接 : How the heck does async/await work in Python 3.5? ...
    Yihulee阅读 65,945评论 4 30
  • 转一篇驹神的关于异步编程和Asyncio的文章。这是上篇,共三篇。原文地址:http://aju.space/20...
    SeanCheney阅读 13,274评论 2 99
  • 1 什么是异步编程 通过学习相关概念,我们逐步解释异步编程是什么。 1.1 阻塞 程序未得到所需计算资源时被挂起的...
    hugoren阅读 7,546评论 2 10
  • 一年了呢。 时间是真的很快 第一次下这个APP 希望是一个记日记的好地方
    _安妮啊砸熊阅读 1,118评论 0 0
  • 我是一棵树,树根如手心的掌纹般浅浅地浮在地表,暴风雨来临时便陷入随时倾倒的危险。可是我渴望长成一棵大树,挺直我粗壮...
    47381988cd2c阅读 952评论 0 0