问题标签 [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.
python - 尝试在 Python 3.5 中运行 Sanic 应用程序的未定义符号
当我尝试使用 Python 3.5 运行 Sanic 应用程序时,我收到以下错误:
它在使用命令创建的虚拟环境中运行virtualenv -ppython3.5 .venv --no-site-packages
我在gentoo上,但我重新编译了所有相关的包,我不知道如何解决这个问题。任何人都可以帮忙吗?
python - sanic:如何异步转换 Markdown 内容
我有以下 Sanic 路线:
这工作得很好,但转换需要很长时间并阻塞端点。基准测试时,端点每秒只能处理 4 个请求。
由于没有 asyncio markdown 库,我想我会将转换卸载到一个单独的线程中以释放阻塞代码:
但是,这会引发回溯:
不能在 Sanic 中使用事件循环吗?是否有任何其他选项可以使转换成为非阻塞?
websocket - 我可以使用 Python3.6 Sanic 检测 websocket 中的“连接丢失”吗?
当我的 Python3.6 Sanic Web 服务器失去与客户端应用程序的连接时(例如:用户关闭 Web 浏览器或网络故障等),我可以检测到(如果是,如何?)
python - 如何设计具有数据查找(> 15K req/sec)的极快python HTTP API?
我需要构建一个 REST API/服务器,它在 80 毫秒内每秒响应超过 HTTP GET 15,000 个请求。如有必要,我可以使用负载均衡器运行多个实例。
服务器收到一个带有标准列表(大约 20 个)的请求,它们需要被解析并与一个规则集(大约 2000 个规则对所有 20 个标准具有不同的值和一个最终决定)进行比较,该规则集决定响应(是或否)。
示例请求有效负载:
示例规则集(仍有待决定,但让我们从一个简单的设计开始):
每个标准可以包含 1 到大约 400 个不同的值,所有字符串(例如 ISO 代码中的 GEO)。有些可能为空并被视为通配符。理论上可能存在所有 20 个标准具有相同值的条目,但这是尚未编写的规则引擎要整理的主题。
我做了一些研究如何实现这一目标:
- 使用 sanic 作为高吞吐量的网络服务器,根据我的研究,这是除了 alpha 的 japronto 之外的 python 最快的;编辑:有没有人对类似用例的基于 python 的 webserver+webframework 的性能有经验?我只阅读通常有一个非常简单的测试用例的基准(只需对请求响应一个固定字符串,因此在所有基准中每秒可能的请求数很高)
- 使用 sqlite3(在内存中)进行规则查找;不确定具有 20 个约束的 SQL 语句是否足够快?也许还有另一种方法可以将每个请求与超过 20 个标准的规则集进行比较(每个标准都是一个字符串比较)。编辑:感谢评论者,我可能会将规则预先计算为散列并使用散列进行查找,因此不需要用于实时查找的数据库。
- 使用 redis 或其他数据库来存储预先计算的规则(这是另一个主题),并使它们准备好加载到 http 服务器的每个实例/worker 中,从而加载到 sqlite3 数据库中。
- 也许使用 pypy3 来提高速度,但我没有使用 pypy 的经验
我会在 Heroku 上主持这个。
所以问题是:哪些库和架构允许使用 python 实现这种速度?
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)。所以,我不明白异步模式在哪里......
谢谢你的帮助
python - 如何将 aiohttp websocket 处理程序重写为 sanic?
websocket handler
我的aiohttp 项目中有以下内容:
但现在我想切换到sanic
框架。如何重写这个方法?我不明白如何从本教程中做到这一点
python - 从调用函数访问数据:记录函数调用的原始来源
我有一个想要添加日志记录的网络应用程序(但我觉得这更普遍适用)。大多数 HTTP 请求不需要记录,但某些操作会导致生成外部调用,这些都应该记录下来。
单个传入的 HTTP 请求可以启动 0 个或多个后端请求,我想记录这些后端请求的来源,以便可以追溯到原始调用。
我天真的方法是在整个调用链中添加一个“客户端 ID”,如下所示:
虽然这可行,但我想避免client_id
在整个调用链中添加。由于大多数函数/方法与客户端逻辑无关,因此在那里添加传递参数感觉不对。
另一种方法是使用全局变量来保存“最近的客户端”,但全局变量几乎总是一个不好的选择,尤其是在使用多线程和/或异步代码(我正在使用)时。
有没有解决这个问题的pythonic方法?理想情况下,我想要类似的东西
但这感觉就像访问“私人”数据。有没有办法以干净的方式完成此任务?
如果有帮助:网络应用程序是用Sanic编写的,这是一个基于 asyncio 的网络框架。记录是使用标准的 python 记录器工具完成的。
python - (sanic)[错误]:在响应写入之前连接丢失
我正在使用 Sanic (Python) 作为 Web 服务器,并面临一些请求的问题。当我们同时收到很多请求时,它会返回错误。错误描述如下:
这是 Sanic 报告此错误的地方: https ://github.com/channelcat/sanic/blob/master/sanic/server.py#L333
因此,根据我的理解,HTTP 连接在 Sanic 可以写入之前关闭,这很好,但如果我愿意,我应该能够覆盖行为并隐藏错误,这是我需要帮助的事情
python - Python 3.6 网络 Sanic + uwsgi
我正在尝试让我的 sanic webapp 与 uwsgi 一起工作,这就是我所做的:
调用我的 uwsgi.ini 文件:
内容:
wsgi.py:
应用程序.py:
当我请求它时,我得到:
我检查了 uwsgi 和 Sanic 文档,但可以找到任何提示……有人可以帮我解决这个问题吗?谢谢和问候!
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
基准测试结果
我的疑问是,我该如何改进
- 超时的请求数。目前它是 4。它应该是零。
- 平均延迟,约为 550 毫秒(太多)
在 POST 请求的情况下,它非常非常糟糕,我正在尝试加载 keras 模型并进行预测。
代码编写方式有问题吗?
或者
这是 Sanic 的限制吗?
我应该尝试另一个 REST 框架吗?
PS:在延迟和超时请求方面,我使用烧瓶的经验更糟。
请提出更好的方法来改善 API 响应时间并减少超时请求?