问题标签 [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 - Rasa X - Google 助理连接器没有收到来自 Rasa 的任何消息
我正在为 Rasa X (rasa 1.0) 创建一个连接器,以将 Google Assistant 用作前端。在 1.0 发布之前,本教程:https ://medium.com/rasa-blog/going-beyond-hey-google-building-a-rasa-powered-google-assistant-5ff916409a25工作得非常好。但是,当我尝试在相同的结构上运行 Rasa X 时,我的旧的基于 Flask 的连接器和启动项目的 Rasa 代理之间存在不兼容性。
在新版本中,rasa.core.agent.handle_channels([input_channel], http_port=xxxx)
改为使用 Sanic,这似乎与我的旧方法不兼容。
我曾尝试将旧的 Flask 连接器转换为 Sanic(以前从未使用过)连接器,并且我使用 Postman 检查了运行状况路线,这很有效。我还收到了来自 Assistant 的有效载荷。但是,当我将此转发给 Rasa 代理时,我没有得到任何回报。
- 这是新的 Sanic 连接器:
- 这是启动项目的脚本:
我希望输出是 Rasa 代理选择的文本作为回复“这是回复”,但我什么也没得到(列表为空)。
编辑
我定义def receive(request):
为async def receive(request):
并更改on_new_message(UserMessage(text,out,sender_id))
为await on_new_message(UserMessage(text,out,sender_id))
. 此外,启动项目的脚本现在是:
不幸的是,它没有改变任何东西,仍然没有在输出通道上得到 Rasa 的任何回复。
python - Sanic 的异步(非阻塞)方法问题
因此,我尝试使用 Sanic 来处理一些异步 Web 请求,因为我有一些特殊的请求需要几秒钟才能返回,但同时希望从客户端执行其他请求。这是一个示例方法,它在等待 lib.getAlarmState() 返回时似乎仍在阻止来自客户端的其他调用。(lib.getAlartmState() 是使用 pythons ctypes 调用 C 库,需要大约 3 秒才能返回并返回 Int 类型。)
根据我在 sanic 文档中看到的内容,只需将方法定义为 async 就可以满足我的要求吗?我试过在 lib.getAlarmState() 前面添加一个等待,但我不确定我使用的是否正确。
我希望在显示的方法停止运行时,我应该能够从客户端调用其他方法并获得响应。
python - 对 Sanic 应用程序进行异步单元测试会引发 RuntimeError:此事件循环已在运行
我有一个 Sanic 应用程序,可以对外部 api 进行一些异步调用。我希望编写一些模拟这些外部调用的单元测试。
正如我们从日志中看到的那样,在下面的代码中,测试确实通过了。然而,在他们完成 RuntimeError: this event loop is already running 后抛出
简化的 Sanic 应用程序:
这是测试:
如上所述,测试确实通过了,但随后抛出了错误。
非常感谢任何帮助或建议。提前致谢
python - 如何在 sanic 中记录所有传入请求和对所有 api 的出站响应
我已经尝试登录每个函数,但为了制作一个通用函数并避免使用相同的 logger.info(),我想使用 sanic 的 logging 属性。
研究它我得到了旋转记录器的信息,但它没有记录请求数据及其标头以及正在发送的响应。我应该在日志配置中包含什么?
这是我的日志配置
websocket - Sanic Webserver:Websocket 处理程序在返回时关闭套接字;循环中断其他请求处理程序
场景:我有一个服务于一个简单网站的 sanic 网络服务器。该网站基本上是一个带有 vue 模板支持的 html 中的大型数据表。由于表条目每隔几分钟就会更改一次,因此数据在更改时通过 websocket 传递。大约同时有2000个用户。我试图实现一个发布/订阅架构。
问题:一旦我的 sanic 处理程序返回,我的 websocket 就关闭了。我可以在里面有一个循环来保持处理程序打开。但是保持 2000 个处理程序处于打开状态听起来是个坏主意……而且打开的处理程序的行为也很奇怪。一个线程或一个小线程池应该可以完成这项工作。也许我把 sanic 文档弄错了,需要设计建议。
我尝试过的事情: - 将超时设置增加到足够高 - 在 sanic 中尝试各种其他 websocket 设置 - 让我的客户端 js 返回错误的 onmessage(Javascript websockets 在打开后立即关闭) - 在传递它后将 ws 引用设置为 null
Sanic Webserver 的索引:
Index.html 的 JS:
Sanic Webserver 的 Websocket 处理程序(第一版,Sockets 立即死亡):
Sanic Webservers 的 Websocket 处理程序(第 2 版,处理程序阻止其他请求处理程序)
Sanic Webservers 的 Websocket 处理程序(第 3 版,不必要的 recv())
最后两个代码片段差别不大。我添加了一个 ws.recv() 并从客户端发送一些合适的东西(例如在一个间隔内),然后一切正常。然后发送 css、字体和 favicon。但这不可能是故意的,不是吗?这不应该很好地扩展,对吧?
总而言之,这对我来说没有多大意义。我有什么误解?
python - 只有在第一个函数设置全局标志后才完成响应
我有两个功能。首先执行检查服务器服务 url-checking。功能作为 sanic-scheduler 任务完成,每 2 秒运行一次。
https://github.com/asmodius/sanic-scheduler
第二个是请求处理程序:
只有在第一个函数new_answer
之后才应该完成响应。isProcessed = True
我怎么能做到。我正在使用 Sanic。
python - 无法使用 jinja2 加载模板
我有以下项目,
每个蓝图文件都有各种sanic
路由,我想在调用时呈现模板。
我尝试将以下内容放入每个blueprint
文件中,
只是为了得到错误ModuleNotFoundError: No module named 'APP'
替换APP
给blueprints
我错误TypeError: expected str, bytes or os.PathLike object, not NoneType
我也尝试过使用FileSystemLoader
这样的,
并加载我需要的模板template = template_env.get_template('file.html')
但是我template not found
在访问网址时得到了一个。
直接尝试渲染我的模板,
再次导致file not found
错误。
jinja
在我的应用程序中使用模板的最佳方式是什么?
python-3.x - 显示表单并保存提交的数据
我有一个简单的应用程序,可以保存和显示数据库中的记录,
在显示用户列表时,类似下面的代码就足够了,
以上使用 Jinja2 但这对我来说并不重要(这不是一个真正的应用程序)。我不清楚如何显示用于创建新用户和保存提交数据的表单,有人可以提供一个简单的例子吗?
python - 如何让 Sanic 响应 http 和 ws?
我有以下代码,用于基于此处组合不同端点的 Sanic hello world:
- https://sanic.readthedocs.io/en/latest/sanic/response.html
- https://sanic.readthedocs.io/en/latest/sanic/websocket.html
代码是:
路线“/”和“/html”工作正常,但是
产生:
和“/html2”呈现页面正常,但不登录到控制台,显示在调试器中:
我应该更改或添加什么来制作一个可行的 websocket 端点,它也可以很好地与 http 端点配合使用?
python - 将同步重写为异步:不等待函数
随着我阅读的更多,我对python中的aysnc感到更加愚蠢。所以我决定要求一个直接的答案。如何更改以下代码(使用异步或类似方法)以实现所需的结果?此外,我怎样才能在烧瓶或 sanic 中做到这一点?
基本上,我不想在返回我的 main_job 之前等待 long_job 结束。先感谢您。:)