问题标签 [sanic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
371 浏览

python - 尝试在 Python 3.5 中运行 Sanic 应用程序的未定义符号

当我尝试使用 Python 3.5 运行 Sanic 应用程序时,我收到以下错误:

它在使用命令创建的虚拟环境中运行virtualenv -ppython3.5 .venv --no-site-packages

我在gentoo上,但我重新编译了所有相关的包,我不知道如何解决这个问题。任何人都可以帮忙吗?

0 投票
1 回答
360 浏览

python - sanic:如何异步转换 Markdown 内容

我有以下 Sanic 路线:

这工作得很好,但转换需要很长时间并阻塞端点。基准测试时,端点每秒只能处理 4 个请求。

由于没有 asyncio markdown 库,我想我会将转换卸载到一个单独的线程中以释放阻塞代码:

但是,这会引发回溯:

不能在 Sanic 中使用事件循环吗?是否有任何其他选项可以使转换成为非阻塞?

0 投票
1 回答
3263 浏览

websocket - 我可以使用 Python3.6 Sanic 检测 websocket 中的“连接丢失”吗?

当我的 Python3.6 Sanic Web 服务器失去与客户端应用程序的连接时(例如:用户关闭 Web 浏览器或网络故障等),我可以检测到(如果是,如何?)

0 投票
1 回答
491 浏览

python - 如何设计具有数据查找(> 15K req/sec)的极快python HTTP API?

我需要构建一个 REST API/服务器,它在 80 毫秒内每秒响应超过 HTTP GET 15,000 个请求。如有必要,我可以使用负载均衡器运行多个实例。

服务器收到一个带有标准列表(大约 20 个)的请求,它们需要被解析并与一个规则集(大约 2000 个规则对所有 20 个标准具有不同的值和一个最终决定)进行比较,该规则集决定响应(是或否)。

示例请求有效负载:

示例规则集(仍有待决定,但让我们从一个简单的设计开始):

每个标准可以包含 1 到大约 400 个不同的值,所有字符串(例如 ISO 代码中的 GEO)。有些可能为空并被视为通配符。理论上可能存在所有 20 个标准具有相同值的条目,但这是尚未编写的规则引擎要整理的主题。

我做了一些研究如何实现这一目标:

  1. 使用 sanic 作为高吞吐量的网络服务器,根据我的研究,这是除了 alpha 的 japronto 之外的 python 最快的;编辑:有没有人对类似用例的基于 python 的 webserver+webframework 的性能有经验?我只阅读通常有一个非常简单的测试用例的基准(只需对请求响应一个固定字符串,因此在所有基准中每秒可能的请求数很高)
  2. 使用 sqlite3(在内存中)进行规则查找;不确定具有 20 个约束的 SQL 语句是否足够快?也许还有另一种方法可以将每个请求与超过 20 个标准的规则集进行比较(每个标准都是一个字符串比较)。编辑:感谢评论者,我可能会将规则预先计算为散列并使用散列进行查找,因此不需要用于实时查找的数据库。
  3. 使用 redis 或其他数据库来存储预先计算的规则(这是另一个主题),并使它们准备好加载到 http 服务器的每个实例/worker 中,从而加载到 sqlite3 数据库中。
  4. 也许使用 pypy3 来提高速度,但我没有使用 pypy 的经验

我会在 Heroku 上主持这个。

所以问题是:哪些库和架构允许使用 python 实现这种速度?

0 投票
1 回答
2868 浏览

python-3.x - Sanic,异步模式下的模板和 Jinja2

我从 python 开始,所以我可以犯错误我喜欢用于 Python 的框架 Sanic,我需要一个模板引擎,我更喜欢使用 Jinja2。

我发现了 Sanic 的两个扩展: 1. https://github.com/yunstanford/jinja2-sanic 2. https://github.com/lixxu/sanic-jinja2

在 Jinja2 文档中,我看到 Jinja 可以使用 Environnement 对象上的特定选项“enable_async=True”异步工作,然后使用“render_async()”。因此,可以在异步模式下使用本机 Jinja。

第一个问题:为什么要使用扩展?Jinja 的语法很简单。

第二个问题:我检查了扩展的代码,但在 Jinja 的特殊语法 async 中没有找到参考。我不是 sur 但我相信扩展在同步模式下使用 Jinga。如果是真的,为什么?

第三个问题:我检查了Jinja2的代码,模板文件似乎正常读取,而不是异步方法(如aiofiles)。所以,我不明白异步模式在哪里......

谢谢你的帮助

0 投票
1 回答
329 浏览

python - 如何将 aiohttp websocket 处理程序重写为 sanic?

websocket handler我的aiohttp 项目中有以下内容:

但现在我想切换到sanic框架。如何重写这个方法?我不明白如何从本教程中做到这一点

0 投票
1 回答
37 浏览

python - 从调用函数访问数据:记录函数调用的原始来源

我有一个想要添加日志记录的网络应用程序(但我觉得这更普遍适用)。大多数 HTTP 请求不需要记录,但某些操作会导致生成外部调用,这些都应该记录下来。

单个传入的 HTTP 请求可以启动 0 个或多个后端请求,我想记录这些后端请求的来源,以便可以追溯到原始调用。

我天真的方法是在整个调用链中添加一个“客户端 ID”,如下所示:

虽然这可行,但我想避免client_id在整个调用链中添加。由于大多数函数/方法与客户端逻辑无关,因此在那里添加传递参数感觉不对。

另一种方法是使用全局变量来保存“最近的客户端”,但全局变量几乎总是一个不好的选择,尤其是在使用多线程和/或异步代码(我正在使用)时。

有没有解决这个问题的pythonic方法?理想情况下,我想要类似的东西

但这感觉就像访问“私人”数据。有没有办法以干净的方式完成此任务?

如果有帮助:网络应用程序是用Sanic编写的,这是一个基于 asyncio 的网络框架。记录是使用标准的 python 记录器工具完成的。

0 投票
2 回答
515 浏览

python - (sanic)[错误]:在响应写入之前连接丢失

我正在使用 Sanic (Python) 作为 Web 服务器,并面临一些请求的问题。当我们同时收到很多请求时,它会返回错误。错误描述如下:

这是 Sanic 报告此错误的地方: https ://github.com/channelcat/sanic/blob/master/sanic/server.py#L333

因此,根据我的理解,HTTP 连接在 Sanic 可以写入之前关闭,这很好,但如果我愿意,我应该能够覆盖行为并隐藏错误,这是我需要帮助的事情

0 投票
1 回答
1639 浏览

python - Python 3.6 网络 Sanic + uwsgi

我正在尝试让我的 sanic webapp 与 uwsgi 一起工作,这就是我所做的:

调用我的 uwsgi.ini 文件:

内容:

wsgi.py:

应用程序.py:

当我请求它时,我得到:

我检查了 uwsgi 和 Sanic 文档,但可以找到任何提示……有人可以帮我解决这个问题吗?谢谢和问候!

0 投票
2 回答
2637 浏览

python - 使用 Python (Sanic) 开发 REST API

我正在尝试使用sanic在 python 中编写 REST API

以下是我的结论:

我尝试使用wrk对这个 GET API 进行基准测试,其中 50 个线程运行 30 秒测试。机器使用 AWS EC2 t2.medium,它有 4GB RAM 和 2 个 CPU 命令使用

wrk -t50 -c4000 -d30s http://XXX.XX.XXX.XXX:8001/v1/ok

基准测试结果

我的疑问是,我该如何改进

  1. 超时的请求数。目前它是 4。它应该是零。
  2. 平均延迟,约为 550 毫秒(太多)

在 POST 请求的情况下,它非常非常糟糕,我正在尝试加载 keras 模型并进行预测。

代码编写方式有问题吗?

或者

这是 Sanic 的限制吗?

我应该尝试另一个 REST 框架吗?

PS:在延迟和超时请求方面,我使用烧瓶的经验更糟。

请提出更好的方法来改善 API 响应时间并减少超时请求?