asyncio

FACEBOOK工程师同问:你的 Python 也是越学越难吗?

痞子三分冷 提交于 2020-08-04 12:27:02
如今学 Python 的程序员越来越多,甚至不少人会把 Python 当作第一语言来学习。 不过尽管 Python 功能强大上手轻松,但并不代表它的学习曲线不陡峭,得来全不费工夫。 当推开 Python 的大门,你会发现 Python 入门简单但精通很难。看似语法记得滚瓜烂熟,但一进入实际项目,就被打回了原型。 比如这些问题你能第一时间想到答案吗: Python 中的协程和线程有什么区别? 生成器如何进化成协程? 并发编程中的 future 和 asyncio 有什么关系? 如何写出线程安全的高性能代码呢? 可能大部分初学者都会卡在这里。若真能解决这些问题,你就具备了成为合格 Python 工程师的必要条件。 为了 系统 地 帮大家 提升 Python 实战编程能力,迅速 从初学者进阶为优秀的 Python 工程师,我联合极客时间开设了一个专栏 《Python 核心技术与实战》。 专栏中我们不会去纠结某些生僻的知识点,而是 从实际出发,以工作中遇到的实例为主线,去讲解 Python 的核心技术和应用。 带你从基础语法起步,掌握语言的高级用法,再到项目中进行实战开发 ,让你把学到知识点通过项目都串联起来,融会贯通,形成自己的 Python 学习框架图 。 整个专栏内容是 基于 Python 最新的 3.7 版本来讲解 ,让你告别网上很多陈旧的学习资料。 原价 ¥9 9 ; 新用户

博客园上传markdown文件

你离开我真会死。 提交于 2020-07-29 02:57:27
个人习惯用markdown写博客,然后同步到博客园,每次同步都比较麻烦。 于是通过metaweblog实现了,一步上传markdown文件的小工具。 工具地址: https://github.com/dongfanger/PyCnblog 关于工具如何使用请访问链接查看readme markdown图片存储设置 写markdown有一利器Typora,一般图片存储设置我会修改成这样。 打开文件>偏好设置,找到'图片插入' 修改为'复制到指定路径',规则设置为./${filename}/ 下面的3个选项全部勾选。 这样当复制粘贴图片到markdown时,就会在目录中新建一个同名文件夹,存储图片。 工具原理 本工具的基本原理是,调用metaweblog的相关api,把图片上传到服务器后,获取url替换本地图片地址,再上传文件到博客园,在博客园后台能看到新博客。 metaweblog是一个开放api,用于和远程blog交互,可以通过xmlrpc建立连接 server = xmlrpc.client.ServerProxy(blog_url) 这里用到了2个api:图片上传.metaWeblog.newMediaObject和博客上传.metaWeblog.newPost。 上传图片部分,通过asyncio包,实现了异步上传。 版权申明:本文为博主原创文章,转载请保留原文链接及作者。 来源

博客园上传markdown文件

戏子无情 提交于 2020-07-28 13:20:53
个人习惯用markdown写博客,然后同步到博客园,每次同步都比较麻烦。 于是通过metaweblog实现了,一步上传markdown文件的小工具。 工具地址: https://github.com/dongfanger/PyCnblog 关于工具如何使用请访问链接查看readme markdown图片存储设置 写markdown有一利器Typora,一般图片存储设置我会修改成这样。 打开文件>偏好设置,找到'图片插入' 修改为'复制到指定路径',规则设置为./${filename}/ 下面的3个选项全部勾选。 这样当复制粘贴图片到markdown时,就会在目录中新建一个同名文件夹,存储图片。 工具原理 本工具的基本原理是,调用metaweblog的相关api,把图片上传到服务器后,获取url替换本地图片地址,再上传文件到博客园,在博客园后台能看到新博客。 metaweblog是一个开放api,用于和远程blog交互,可以通过xmlrpc建立连接 server = xmlrpc.client.ServerProxy(blog_url) 这里用到了2个api:图片上传.metaWeblog.newMediaObject和博客上传.metaWeblog.newPost。 上传图片部分,通过asyncio包,实现了异步上传。 版权申明:本文为博主原创文章,转载请保留原文链接及作者。 来源

Python3+WebSockets实现WebSocket通信

筅森魡賤 提交于 2020-07-28 08:03:57
一、说明 1.1 背景说明 前段时间同事说云平台通信使用了个websocket的东西,今天抽空来看一下具体是怎么个通信过程。 从形式上看,websocket是一个应用层协议,socket是数据链路层、网络层、传输层的抽像;从应用场合上看,websocket可以使用javascript实现,而socket不能用javascript实现(真不能吗?我不太确定);从实际效果上看,和一般的socket连接用起来没什么区别。 我们知道http是短连接的,反复建立和销毁连接比较耗费资源,另外http协议经常头部内容比主体内容还长也比较浪费资源;websocket可以认为就是一个内容使用载荷固定格式的socket长连接。 websocket基本协议格式如下,更多说明见 RFC 6455 : 1.2 环境说明 当前环境我使用Python3+WebSockets库,WebSockets直接使用pip安装即可: pip install websockets 二、代码实现 长连接是有状态的,所以一般在且只在最开始进行一次身份认证,而后通信过程不需要认证信息。我们这里实现一个简单的用户名密码认证过程。长连接更多内容可参考“ 长 连接 与短 连接 的安全差异讨论 ”。 另外,注意把代码中的ip改成自己的。 2.1 python服务端代码 import asyncio import websockets #

蠎周刊422 ~ 超现代 Python 开发环境配置

∥☆過路亽.° 提交于 2020-07-28 04:27:46
Title: Issue 422 Slug: issue-422 Date: 2020-05-20 11:42 Tags: Weekly,Python,pycoders,ZH 超现代 Python 开发环境配置 原文: PyCoder's Weekly - Issue #422 200527 Zoom.Quiet (大妈) 用时 42 分钟 完成快译 200527 Zoom.Quiet (大妈) 用时 37 分钟 完成格式转抄. 在异步中等待 HYNEK SCHLAWACK There are many ways to wait on the results of a coroutine in Python’s asyncio framework. They all have different properties and use cases. In this article, they’ve all been collected in one place to help you figure out which one you need. 异步 Python 中的延迟 CHRTIS WELLONS Where does latency in asynchronous programs come from? Explore some common mistakes in

FILE "\ASYNCIO\EVENTS.PY", LINE 501, IN ADD_READER RAISE NOTIMPLEMENTEDERROR 报错解决

巧了我就是萌 提交于 2020-05-08 02:14:46
“D:\PYTHON38\LIB\ASYNCIO\EVENTS.PY”, LINE 501, IN ADD_READER RAISE NOTIMPLEMENTEDERROR NOTIMPLEMENTEDERROR 报错解决 PYTHON3在使用TORNADO框架时出现的问题 问题如下 Traceback (most recent call last): File "D:/python38_pycharm/web_server_tornado.py", line 45, in <module> http_server.add_sockets(sockets) File "D:\python38_pycharm\venv\lib\site-packages\tornado\tcpserver.py", line 165, in add_sockets self._handlers[sock.fileno()] = add_accept_handler( File "D:\python38_pycharm\venv\lib\site-packages\tornado\netutil.py", line 279, in add_accept_handler io_loop.add_handler(sock, accept_handler, IOLoop.READ) File "D:

Python 异步编程再添一利器

扶醉桌前 提交于 2020-05-05 12:47:34
随着 Tornado 和 asyncio 等框架的陆续涌现,Python 异步编程这个话题也在逐渐升温。在这个烧脑的异步世界里,有没有办法可以既方便快捷、又简单明了地访问数据库呢?GitHub 千星项目 GINO 了解一下! 1. GINO 是谁 GINO 是一个“轻量级”异步 ORM 框架,它的全称是 GINO Is Not ORM,借鉴了 GNU is Not Unix 的递归定义手法。所以,GINO 一定要全!部!大!写!如果像这样“Gino”就变成了人名,你肯定要问一句“这是谁”。 ORM,即关系对象映射(Object-Relational Mapping),是一类开发人员喜闻乐见的效率工具,它们"极大地"提升了写代码的幸福指数。GINO 是用来访问数据库的,也提供了对象映射的工具,那为什么非说 GINO 不是 ORM 呢? 因为物极必反,ORM 在带来生活便利的同时,也是 bug 生长的温床 —— 传统 ORM 往往会选择牺牲明确性(explicitness)来换取便捷性(convenience),再加上 Python 得天独厚的灵活性(flexibility),创造出了一种爆炸式的化学反应。一旦代码初具规模,项目或多或少都会遇到 ORM 反噬的情景:性能莫名其妙的差、出问题找不到原因、为了鸡毛蒜皮的小事大动干戈。随便一句 current_user.name

Python协程&asyncio&异步编程

喜夏-厌秋 提交于 2020-05-04 18:05:32
Python协程&asyncio&异步编程 1.协程 协程是微线程,是一种用户态上下文切换技术,通过一个线程实现代码块相互切换执行 实现协程有这么几种方法: greenlet,早期的模块 yield 关键字 asyncio python3.4引入的 async、await关键字 python3.5 主流[推荐] 1.1 greenlet实现协程 pip install greenlet # -*- coding: utf-8 -*- from greenlet import greenlet def func1(): print(1) # 第1步:输出1 gr2.switch() # 第2步:跳到func2函数 print(2) # 第5步:输出2 gr2.switch() # 第6步:跳到func2函数 def func2(): print(3) # 第3步:输出3 gr1.switch() # 第4步:跳到func1函数 print(4) # 第7步:输出4 gr1 = greenlet(func1) gr2 = greenlet(func2) gr1.switch() # 第1步:去执行func1函数 1.2 yield关键字 # -*- coding: utf-8 -*- def func1(): yield 1 yield from func2() yield 2 def

影响Python行为的环境变量

好久不见. 提交于 2020-05-02 14:23:28
影响Python行为的环境变量 [toc] 国庆前来一篇。 Python解释器其实也是一个软件,运行再操作系统环境下,所以Python是受操作系统环境变量影响的。所以环境变量也是需要关注的。特别是当我们使用sys模块时,很多都必须考虑环境变量。 命令行指定变量值会覆盖环境变量值。 环境变量 1. PYTHONHOME 该变量影响python标准库的位置。 默认:库是在prefix/lib/pythonversion 和 exec_prefix/lib/pythonversion。 prefix和exec_prefix是和安装有关的目录,两个默认是/usr/local 如果PYTHONHOME设置的是单个目录,那么prefix和exec_prefix都是该目录。如果要指定两者的不同值,那么设置值就像这样的格式:prefix:exec_prefix 2. PYTHONPATH 这个变量是影响python搜索module模块的路径。这个变量值的格式就像linux-shell的PATH。 出了是路径外,还可以是一个纯粹包含python代码文件的zip压缩包。 默认:默认搜索路径值是依赖安装目录的,一般都是prefix/lib/pythonversion 一些额外的路径,是会放在PYTHONPATH默认值的前面追加。 通过sys.path可以在代码层面修改搜索路径。 3.

Python协程(真才实学,想学的进来)

坚强是说给别人听的谎言 提交于 2020-05-01 03:34:55
真正有知识的人的成长过程,就像麦穗的成长过程:麦穗空的时候,麦子长得很快,麦穗骄傲地高高昂起,但是,麦穗成熟饱满时,它们开始谦虚,垂下麦芒。 ——蒙田《蒙田随笔全集》 上篇论述了关于python多线程是否是鸡肋的问题,得到了一些网友的认可,当然也有一些不同意见,表示协程比多线程不知强多少,在协程面前多线程算是鸡肋。好吧,对此我也表示赞同,然而上篇我论述的观点不在于多线程与协程的比较,而是在于IO密集型程序中,多线程尚有用武之地。   对于协程,我表示其效率确非多线程能比,但本人对此了解并不深入,因此最近几日参考了一些资料,学习整理了一番,在此分享出来仅供大家参考,如有谬误请指正,多谢。 申明: 本文介绍的协程是入门级别,大神请绕道而行,谨防入坑。 文章思路:本文将先介绍协程的概念,然后分别介绍Python2.x与3.x下协程的用法,最终将协程与多线程做比较并介绍异步爬虫模块。 协程 概念   协程,又称微线程,纤程,英文名Coroutine。协程的作用,是在执行函数A时,可以随时中断,去执行函数B,然后中断继续执行函数A(可以自由切换)。但这一过程并不是函数调用(没有调用语句),这一整个过程看似像多线程,然而协程只有一个线程执行。 优势 执行效率极高,因为子程序切换(函数)不是线程切换,由程序自身控制,没有切换线程的开销。所以与多线程相比,线程的数量越多,协程性能的优势越明显。