标签 python 下的文章

微软:“IE 被黑了这么多年”

微软宣布 IE 将于 6 月 16 日正式退役,Edge 浏览器的官方微博送上告别微博,“终于,被黑了这么多年,IE 要正式跟大家说再见啦。IE 27 年的旅程,从今以后,这条路由 Edge 替 IE 继续走下去。”IE 浏览器是微软在 1995 年 8 月伴随 Windows 95 推出的。在推出三年后,IE 成为全球市场份额第一的浏览器,在 2003 占据了全球市场高达 95% 的份额。

不过,虽然退役了 ,但对于那些死抱着 IE 不放手的网站,Edge 继续提供了 IE 模式,该模式至少会支持到 2029 年。此外,出于企业需求,Windows 10 LTSC(长期服务版)也将继续保留 IE 浏览器。

消息来源:微博
老王点评:我觉得,真不是大家黑你,是你本身就是黑的呀。不过,大家也别高兴的太早,还是有大把的公共网站继续赖在 IE 上。

Python 的速度将提升一倍

去年,微软资助了 Python 软件基金会的 Faster CPython 项目,旨在使 Python 的速度比目前稳定的 3.10 系列快一倍。现在,该项目公布了更多的结果,将 3.11 beta 预览版与 3.10 的几十项性能指标进行了比较,显示 3.11 总体上比 3.10 快 1.25 倍。该项目负责人说,“Python 被普遍认为是慢的。虽然 Python 永远不会达到像 C、Fortran 甚至 Java 这样的低级语言的性能,但我们希望它能与脚本语言的快速实现相竞争,比如 Javascript 的 V8 或 lua 的 luajit。”

消息来源:ZDNet
老王点评:微软真是做了一件大好事,久被诟病的 Python 速度问题,居然就这样提高了一倍!

微软还有第二个内部使用的 Linux 发行版

我们知道,微软有一个内部使用的 Linux 发行版,CBL-Mariner,它刚刚发布了 2.0。现在有人发现微软在发布 CBL-Mariner 同一年,还发布了一个名为 CBL-Delridge(或 CBL-D)的 Linux 发行版。两者之间的主要区别是:Delridge 是一个定制的 Debian 衍生版,而 Mariner 是一个定制的 LFS 风格的发行版。Azure Cloud Shell 就建立在 CBL-D 之上,它提供了一套打包在容器中的云管理工具。

消息来源:ZDNet
老王点评:微软现在是真正践行了“拿来主义”,但凡好的,都拿来。

Memray 是一个由彭博社开发的 内存剖析器 memory profiler ,现在已经开源。它可以跟踪 Python 代码中的内存分配,包括本地扩展和 Python 解释器本身。内存剖析是了解程序如何利用内存的有力工具,因此可以检测内存泄漏或确定程序中哪些区域消耗的内存最多。

与 py-spy 等抽样内存剖析器相比,Memray 可以跟踪每个函数调用,包括对 C/C++ 库的调用,并详细显示调用栈。彭博社称,这并不以牺牲性能为代价,剖析只使解释代码的速度变慢一点。然而,原生代码剖析的速度较慢,因此需要直接启用。

Memray 可以根据获得的内存消耗数据生成各种报告,包括火焰图,这对快速、准确地识别最常见的代码路径很有价值。

据 EgdeDB 的联合创始人兼 CEO Yury Selivanov 称,该工具提供了以前无法获得的对 Python 应用的洞察力。Memray 可以用来从命令行中执行和剖析 Python 应用。

$ python3 -m memray run -o output.bin my_script.py
$ python3 -m memray flamegraph output.bin

另外,你可以使用 pytest-memray 将 Memray 集成到你的测试套件中。你也可以用 -native 命令行选项对所有的 C/C++ 调用进行剖析,或者用 -live 命令行选项在程序执行过程中实时分析内存分配。Memray 可以在 Linux x86/64 系统上用 python3 -m pip install memray 来安装。

(题图由 Frantisek KrejciPixabay 上发布 )


via: https://www.opensourceforu.com/2022/04/bloomberg-open-sources-memray-a-python-memory-profiler/

作者:Laveesh Kocher 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

CyberDB,一个基于 Python 字典和列表的内存数据库。

概括

CyberDB 是一个轻量级的 Python 内存数据库。它旨在利用 Python 内置数据结构字典、列表作数据存储,通过 TCP 套接字高效通信,并提供了数据持久化。该数据库的亮点在于它使用了 Pythonic 的方式编程,你可以像使用字典和列表一样使用 CyberDB。

现在我们把 CyberDB 带到能发挥其作用的地方,在生产环境中将 CyberDB 作为 Flask 的内存数据库,使用 Gunicorn 运行,并实现多进程间的通信。

这篇文章通过一个尽可能精简的 Flask 实例讲解,不会涉及复杂的 Web 知识。核心思路为 CyberDB + Gunicorn + Gevent + Flask(多进程 + 协程),启动一个 CyberDB 服务器,使用 Gunicorn 多进程运行 Flask 实例,每个进程的实例通过 Gevent 运行,进程中使用 CyberDB 客户端连接至内存数据库,由此实现对 CyberDB 数据库的高并发访问。

源码解析

文章使用 PyPy 运行,同样适用 CPython。

运行环境: Debian 10, Python 3.8.12, PyPy 7.3.7

此项目的目录结构

.
├── app.py
├── cyberdb_init.py
├── cyberdb_serve.py
├── requirements.txt
└── venv

我们通过列举每个文件的内容顺序讲解 CyberDB 的核心操作。

文件 requirements.txt

CyberDB>=0.7.1
Flask==2.1.1
gevent==21.12.0
gunicorn==20.1.0

这是此项目的依赖。这篇文章不是 Python 基础教程,如果你不清楚,请查询相关文档创建虚拟环境 venv 目录并安装 requirements.txt 中的依赖。

生成 venv 目录并安装好依赖后,下面所有操作都在激活的虚拟环境中运行。

文件 cyberdb\_init.py

功能:初始化 CyberDB 的表结构,只在第一次运行时使用,后续不再使用。

import time

import cyberdb

db = cyberdb.Server()
# 配置 CyberDB 服务端的 地址、端口、密码。
db.start(host='127.0.0.1', port=9980, password='123456')

# 待服务端启动后,连接 CyberDB 服务端。
time.sleep(3)
client = cyberdb.connect(host='127.0.0.1', port=9980, password='123456')
# 生成 proxy 对象。
with client.get_proxy() as proxy:
    # 创建类型为 CyberDict 的表 centre,并初始化内容。
    proxy.create_cyberdict('centre')
    centre = proxy.get_cyberdict('centre')
    centre['content'] = 'Hello CyberDB!'

# 将 CyberDB 保存至 data.cdb 。
db.save_db('data.cdb')

在项目根目录执行

python cyberdb_init.py

以完成 CyberDB 数据库表的初始化。

它会在 CyberDB 中创建了一个名为 centre、类型为 CyberDict 的表;初始化 content 键的值为 Hello CyberDB!;最后将 CyberDB 数据库保存至硬盘(在项目根目录生成了名为 data.cdb 的文件)。

文件 cyberdb\_serve.py

功能:运行 CyberDB 服务端。

import cyberdb

def main():
    # 后台运行 CyberDB 服务端,设置相关信息。
    db = cyberdb.Server()
    # 从硬盘读取 data.cdb 至 CyberDB。
    db.load_db('data.cdb')
    # 每 300 秒备份一次数据库。
    db.set_backup('data.cdb', cycle=300)
    db.run(
        host='127.0.0.1', # TCP 运行地址
        port=9980, # TCP 监听端口
        password='hWjYvVdqRC', # 数据库连接密码
        max_con=10000, # 最大并发数
        encrypt=True, # 加密通信
        print_log=False # 不打印日志
    )


if __name__ == '__main__':
    main()

在项目根目录执行

python cyberdb_serve.py

以运行 CyberDB 服务端。

此处设置了 encrypt=True ,CyberDB 会将 TCP 通信内容使用 AES-256 算法加密。开启 encrypt=True 后,CyberDB 仅允许白名单中的 IP 通信,默认白名单为 ['127.0.0.1'](查看白名单 设置方法)。一般,若只需在本地进程间通信,无需开启 encrypt=True 和设置白名单,只有远程通信时需要此操作。

文件 app.py

功能:运行 Flask 实例和 CyberDB 客户端。

import cyberdb
from flask import Flask, g

# 连接 CyberDB 并生成客户端实例。
client = cyberdb.connect(
    host='127.0.0.1', 
    port=9980, 
    password='hWjYvVdqRC',
    # 服务端若加密,客户端必须加密,反之亦然。
    encrypt=True,
    # 每个连接若超过900秒无操作,将舍弃该连接。
    # 连接由连接池智能管理,无需关注细节。
    time_out=900
)

# 创建 Flask 实例,此部分请参考 
# Flask 文档 https://flask.palletsprojects.com/
app = Flask(__name__)

@app.before_request
def before_request():
    # 每次请求执行前生成 proxy 对象。
    g.proxy = client.get_proxy()
    # 从连接池获取连接。
    g.proxy.connect()

@app.get("/")
def hello_world():
    # 从数据库获取 centre 表。
    centre = g.proxy.get_cyberdict('centre')
    
    return {
        'code': 1,
        'content': centre['content']
    }

@app.teardown_request
def teardown_request(error):
    # 每次请求执行后归还连接至连接池。
    g.proxy.close()

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8000)

该模块会在每次请求执行前(before_request())使用 client.get_proxy() 获取 proxy 对象,每个获取的 proxy 对象可以绑定一个 TCP 连接,此处使用 proxy.connect() 从连接池获取连接。视图函数 hello_world() 中,由 proxy 获取的对象 centre,与 proxy 共用同一个连接,proxy 的连接释放后,centre 也会失去连接。在每次请求后(teardown_request())使用 proxy.close() 方法释放 proxy 绑定的连接,归还至连接池。

cyberdb.connecttime_out 参数表示连接池中每个连接的超时时间,此处每个连接超过 900 秒无操作将被舍弃。若不设置该参数,连接池的每个连接会维持到失效为止。

使用 Gunicorn 运行 Flask 实例

Gunicorn 是一个用于 UNIX 的 Python WSGI HTTP 服务器,通常在生产环境使用,可以利用多核 CPU 。

Gevent 是一个基于协程的 Python 网络库。Gevent 会更改 CyberDB 客户端的底层套接字通信,使之支持协程。

在项目根目录运行

gunicorn -w 4 -b 127.0.0.1:8000 -k gevent app:app

使用 4 进程、Gevent 启动 Flask 实例。

浏览器访问 127.0.0.1:8000 ,得到如下响应:

{"code":1,"content":"Hello CyberDB!"}

参考信息

CyberDB 源码: https://github.com/Cyberbolt/CyberDB

总结

通过此例,你可以把 CyberDB 部署到更复杂的 Web 环境中,充分享受内存的低延迟特性。CyberDB 的核心是以 Pythonic 的方式编程,你可以在任何 Python 代码中将 CyberDB 作为内存数据库。


作者简介:

Cyberbolt:一个自由的 Python 开发者。


via: https://www.cyberlight.xyz/static/cyberdb-chn/tutorial/flask/

作者:Cyberbolt 编辑:wxy

本文由贡献者投稿至 Linux 中国公开投稿计划,采用 CC-BY-SA 协议 发布,Linux中国 荣誉推出

最受欢迎的 shell 是什么?我猜你会回答 bash 或者 zsh,没错,的确如此。

UNIX 和 Linux 系统上有许多可用的 shell,包括 Bash、Ksh、Zsh、Fish 等等。

最近,我碰到了另外一个 shell,它结合了 Python 和 bash,还蛮特别的。

Xonsh shell,为喜爱 Python 的 Linux 用户而打造

Xonsh 是一个使用 Python 编写的跨平台 shell 语言和命令提示符。

它结合了 Python 和 Bash shell,因此你可以在这个 shell 中直接运行 Python 命令(语句)。你甚至可以把 Python 命令和 shell 命令混合起来使用。

听起来不错吧?如果你是一个 Python 程序员的话,你应该会更加兴奋。

在 Linux 上安装 Xonsh shell

有多种方式可以在 Linux 系统上安装 Xonsh shell。

你可以使用软件包管理器安装它(主要的 Linux 发行版的仓库中都有 Xonsh shell)。

在 Ubuntu 和 Debian 上,你可以尝试运行:

sudo apt install xonsh

因为它本质上是一个 Python 应用,所以你总是可以使用 Pip 来安装(如果你的系统已经安装了的话)。或者,你也可以使用 Conda 来安装 Xonsh。同时,它还提供了 AppImage 格式和 Docker 镜像。

你可以自由选择你喜欢的安装方式。

Xonsh shell 初体验

如果你不熟悉 Linux 的“多 shell”概念和终端的相关知识,我推荐你阅读 我写的一篇终端入门的文章。这篇文章会帮助 Linux 新手弄清楚很多东西。

我在这里简单介绍一下。你的终端运行着一个默认的 shell(通常是 bash shell)。如果你在系统上安装了其他的 shell,你可以 轻松地切换这些 shell

要进入 Xonsh shell,只需运行一条命令:

xonsh

它会建议你运行一个设置向导,然后创建一个 Xonsh shell 的自定义 rc 配置文件。这是可选的,你也可以晚些时候再做。

一旦你开始使用它,你就立刻会感觉到一些不同。

当你开始输入一条命令时,Xonsh 会自动建议历史记录中的最后一条匹配命令。你可以按下右箭头键确认使用这条自动建议的命令。你也可以按下上、下箭头键来选择历史记录中的其他匹配命令。

Xonsh shell automatically suggests last matching command from the history as you type

不仅如此,它还支持交互式的 Tab 补全。当你开始输入命令,并按下 tab 键,它会显示一个类似于下拉式的交互式菜单。你可以在这个菜单中选择可用的命令。

Tab completion in Xonsh shell

你可以混合使用 Python 和 bash 命令,并且直接在 shell 中运行它们。

如果你对 终端定制 感兴趣,你可以花点时间和精力,根据自己的喜好来定制 Tab 补全、按键绑定和颜色样式。

它同时拥有一个叫做 Xontrib 的用户自定义插件系统,你可以使用这些插件来扩展 Xonsh shell 的功能。

如果你是一个终端爱好者,并渴望学习更多终端知识,你可以浏览它的 丰富的文档系统

最后

大多数用户坚持使用默认的 Bash shell,这很正常。有一些开发者和系统管理员会选择使用 Zsh,因为它有很多附加特性。而 Xonsh 完全聚焦在 Python 上,对于 Python 使用者来说,它或许具有吸引力。对于其余的人来说,Bash 已经足够好了。

你使用过 Xonsh 或者其他的 shell 吗?你用它来代替 Bash 的原因是什么呢?欢迎在评论区留言。


via: https://itsfoss.com/xonsh-shell/

作者:Abhishek Prakash 选题:lujun9972 译者:lkxed 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

洋葱新闻:“Linus 发现 Windows XP 很棒”

Linux 创始人 Linus Torvalds 在 GitHub 上的 Linux 仓库的 README 中写道:“我删除了Linux,因为我讨厌它,现在我认为它很糟糕。你应该去使用这个很棒的操作系统,它叫 Windows XP,我刚刚发现它很棒。”,这个文件的 URL 是 https://github.com/torvalds/linux/tree/8bcab0346d4fcf21b97046eb44db8cf37ddd6da0 ,没错,看起来是 Linux 的仓库地址。好吧,这是一个洋葱新闻。事实上,这是一个 GitHub 的 bug,任何人都可以通过伪造 URL 而看起来像是另外的仓库和另外的作者。而这个 Bug 由来已久,但是 GitHub 从未准备修复。

老王点评:无论 GitHub 基于什么理由不修复,但是通过这个漏洞可以制作出以假乱真的钓鱼信息,大家一定要注意。

最新版 macOS 12.3 终于移除了 Python 2 的支持

苹果释出了 macOS Monterey 12.3 Beta,一个主要变化是 不再捆绑 Python 2.7。苹果建议开发者使用 Python 3 或替代语言。Python 语言项目在 2020 年 1 月 1 日停止支持 Python 2 分支,接替 Python 2 的 Python 3 早在 2008 年就已经发布,但由于它不向后兼容,导致许多用户仍然停留在 Python 2 分支。但 macOS 也没有预装 Python 3,开发者可选择安装捆绑 Python 3 的 Xcode 开发工具。

老王点评:如果 Python 3 能对 Python 2 提供更多的兼容性,而不是弃之如敝履,就不会有这么多的产品和服务还留在 Python 2。

OpenSea 称其上免费创建的 NFT 80% 都是垃圾或剽窃作品

占有绝对垄断地位的 NFT 市场 OpenSea 宣布,它将限制用户在平台上使用其工具免费创建 NFT 的次数为 50 次。这些免费创建的 NFT 可以跳过支付区块链燃料费用,而在售出时由买家支付。之后在社区的反对之下,OpenSea 又宣布取消这一限制,同时也给出了做此限制的 理由:用这个免费工具创建的项目中,超过 80% 是抄袭作品、虚假收藏和垃圾内容。

老王点评:其实我觉得这种对免费创建的限制是有道理的,要不 OpenSea 可能会沦为垃圾场。

这些文章的作者们揭示了使用这一流行的编程语言的新方法。

 title=

长期以来,Python 一直是最受欢迎的编程语言之一,但这并不意味着没有什么新东西可学。我们关于 Python 的阅读量最大的文章列表是一个很好的开始。

  • 机器学习的广泛采用已经到来,其应用仍在增长。看看使用 朴素贝叶斯 分类器并通过 Python 实现的机器学习如何解决现实生活中的问题。
  • 向 Python 3 的过渡已经完成,但增强功能不断涌现。Seth Kenlon 强调了 Python 3 中的五颗隐藏的宝石,它们在最近的改进中脱颖而出。
  • Openshot 多年来一直是 Linux 视频编辑的最佳选择之一。这篇受欢迎的文章将告诉你,你也可以用这个 Python 应用 在 Linux 上编辑视频
  • Python 最好的部分是一个程序员可以实现的无限可能。Cython 是一个编译器,不仅可以帮助加快代码执行速度,还可以让用户为 Python 编写 C 语言扩展。
  • Python 可以使 API 单元测试更简单。Miguel Brito 向你展示了 用 Python 测试 API 的三种方法
  • 随着计算能力的提高,越来越多的程序在并发运行。这可能会使调试、日志记录和剖析出错的地方成为挑战。VizTracer 正是为了解决这个问题而创建的。
  • 用户的个人项目,无论大小,都很好地提醒我们开源编码可以有无穷的乐趣。这里有一个鼓舞人心的项目:Darin London 如何使用 CircuitPython 监控他的温室
  • Linux 用户经常会遇到需要大量命令行参数的程序,这让人很不爽。这是一个 不错的配置解析技巧,可以让生活更轻松。

via: https://opensource.com/article/22/1/python-roundup

作者:Sumantro Mukherjee 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出