问题标签 [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 回答
943 浏览

docker - Docker image with Sanic over alpine:latest(3.9) uses python json instead of ujson

Dockerfile:

Sanic server:

Running Sanic server using docker image returns 500:

TypeError: Object of type 'datetime' is not JSON serializable

but running this server app from command line works just fine.

The more interesting thing is that if Alpine linux version 3.8 is used that server app works fine with it.

I think Sanic server can not find ujson package and use default python json.

Does someone have any suggestion how to fix this?

0 投票
2 回答
2675 浏览

python - Python run_in_executor 忘了?

如何设置阻塞函数以在执行程序中运行,结果无关紧要,因此主线程不应该等待或被它拖慢。

老实说,我不确定这是否是正确的解决方案,我想要的只是将某种类型的处理队列与主进程分开,这样它就不会阻止服务器应用程序返回请求,因为这样Web 服务器类型为许多请求运行一个工作人员。

最好我想远离像 Celery 这样的解决方案,但如果这是最优化的,我愿意学习它。

这里的上下文是一个异步 Web 服务器,它生成带有大图像的 pdf 文件。

上面的代码给出了错误(是的,它以管理员身份运行):

奖励问题:通过在执行程序中运行 asyncio 循环,我能获得什么吗?因此,如果它一次处理多个 PDF 请求,它将在它们之间分配处理。如果是,我该怎么做?

0 投票
2 回答
517 浏览

http - 我需要 gunicorn 来实现内部异步微服务吗?

据我在互联网上阅读 - 部署 Flask/Django 应用程序的最佳实践是将其放在诸如 nginx 之类的 Web 服务器后面,并将它们与诸如 gunicorn 或 uWSGI 之类的 pre-fork 服务器捆绑在一起。

这有很多原因,例如 ssl 终止、防止 HTTP 攻击 (nginx)、分叉到线程以实现并发、内存泄漏后重新启动应用程序或其他异常 (gunicron)。

我想使用pm2在sanic上部署一个内部 API 微服务,因为它不是面向客户的,而是只会从内部服务调用 SSH 终止和防止 HTTP 攻击是无关紧要的,并发性由 sanic 的 asyncio 性质和异常重启由 pm2 处理。

我还需要gunicorn和nginx吗?我不能按原样运行应用程序进程并让它直接与调用者对话吗?

0 投票
1 回答
1165 浏览

python - 如何在 python 中使用 gino 管理迁移

我正在尝试将ginosanic 一起用于实验项目。我阻止了将我的 model.py 迁移到数据库。

flask-migrate在使用 flask 和 sqlalchemy 时使用过(更准确地说,它是 flask-sqlalchemy)

在 sanic & gino 堆栈中管理数据库迁移的常用工具是什么?

0 投票
1 回答
361 浏览

python-3.x - AsyncSSH 创建 SFTP 客户端错误 - 太多值无法解压

我在 Sanic 应用程序(运行 Asyncio 事件循环)中使用 asyncssh 库来创建 SFTP 客户端连接。在我的代码中,我正在这样做:

当我尝试执行此操作时出现此错误:

当我调试它并注销start_sftp_client()实际返回的内容时,我得到了这个:

(asyncssh.stream.SSHWriter 对象位于 0x7f51bbb29dd8,asyncssh.stream.SSHReader 对象位于 0x7f51bbb29da0,asyncssh.stream.SSHReader 对象位于 0x7f51b99b7978,asyncssh.stream.SSHClientStreamSession 对象位于 0x7f51bbb29f98)

所以它实际上返回了 4 个值......当我查看 asyncSSH 的源代码时,在 start_sftp_client() 实际执行的操作中,它只寻找三个:

writer, reader, _ = yield from self.open_session(subsystem='sftp', encoding=None)

所以抛出这个错误是有道理的......但是为什么呢?

当我从 python 控制台运行这个方法时——它工作得很好。从此脚本正确创建了 SFTP 客户端:

0 投票
1 回答
412 浏览

nginx - 在 Nginx 旁边部署 Sanic 服务器

我正在尝试在 Nginx 旁边部署一个 Sanic 应用程序。我希望 Nginx 处理:

  1. 文件服务(我的 SPA 和其他资产)
  2. Certbot/letsencrypt ssl(可以不用)

我希望 Sanic 处理我的 API 端点。

我知道如何分别处理每个。但是,我不知道如何使它们彼此相邻运行。据我所知,你不能让两个服务监听同一个 TCP 端口。如果是这样,我是否应该让 Nginx 充当 Sanic 的反向代理?如果是这样,你会怎么做?

任何指导将不胜感激。

0 投票
1 回答
657 浏览

python - 使用石墨烯graphql时是否可以在内部进行url重定向?

我目前正在使用 sanic-graphql,但我似乎根本无法运行 URL 重定向。

但似乎库的逻辑是始终尝试返回包装在输出类型中的返回值。

有什么方法可以触发正常的 URL 重定向?

0 投票
1 回答
1646 浏览

python - 代码重载的热重载python进程

有什么方法可以为正在运行的 python 进程热重载 python 模块?在通常情况下,我们可以运行kill -HUP <pid>一些服务器,如 squid、nginx、gunicorn。我正在运行的进程是

0 投票
0 回答
235 浏览

python-3.x - 如何在 Sanic 中使用依赖注入实现 CORS

我正在使用依赖注入库在 Sanic 中构建 API,并且正在尝试实现 CORS。

我试图将 Sanic 类分配给一个变量并将其CORS()传递__name__providers.Factory.

下面的评论显示了我尝试实现 CORS 的确切行:

我预计运行 API 不会出错,但我在下面收到此错误:

0 投票
0 回答
1122 浏览

python-3.x - 为什么在 blazemeter 上测试时将同步代码移动到 loop.run_in_executor 会导致性能下降

我在用着

  • Python-3.7
  • sanic-19.3
  • asyncio-3.4
  • 熊猫-0.24

我在 sanic 框架上运行的应用程序中几乎没有 pandas 操作。例如:

我已尝试按照 asyncio 文档中的建议将它们移动到 run_in_executor 。

但我发现在blazemeter上测试时,整体性能(以点击次数/秒、平均响应时间衡量)下降 了 用 50 个并发虚拟用户测试,5 分钟

测试的 Api 包含许多操作,包括和类似于上面提到的操作(也包括 DB 调用)

  • 命中/秒 -> 减少约 12%
  • 平均响应时间 -> 增加约 12-13%
  • 带宽 -> 减少约 12%

在添加 loop.run_in_executor 之前

添加 loop.run_in_executor 后

需要注意的一件事是我loop = asyncio.get_event_loop()在每个函数中调用,而不是在控制器函数中调用它并传递给每个辅助函数,这是否解释了性能损失?

让我知道是否需要更多信息 谢谢