问题标签 [asgi]
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 - 在运行 Sophos 的机器上,为什么我的所有浏览器都无法从我的 Python 应用程序实时接收服务器发送的事件 (sse)?
我的 ASGI 应用程序可以很好地向 curl 和我的手机发送事件。但是,即使服务器正在发送事件,并且标头看起来正确,但我的 Windows 机器上的 Firefox 和 Chrome 都不会收到事件,直到连接关闭。
无论我将服务器托管在 WSL、Powershell 终端还是单独的 Linux 机器上,都会发生这种情况。
但是,如果我在 repl.it 上托管服务器,这些相同的浏览器可以正常工作(请分叉并试用)。
我曾尝试摆弄 Windows 防火墙设置,但无济于事。
这是应用程序代码:
这可以通过将上面的文件命名为asgi_sse.py
, 然后pip install uvicorn
, 然后使用类似的东西来运行
(替换daphne
或hypercorn
代替uvicorn
上面的内容,看看这些服务器如何处理应用程序。)
标题:
和回应:
任何见解都非常受欢迎!
tornado - 如何管理 Tornado 应用程序中资源的异步启动和关闭?
我想在 Tornado 应用程序中使用aioredis 。但是,我想不出一种方法来实现其资源的异步启动和关闭,因为 Application 类没有 ASGI Lifespan事件,例如 Quart 或 FastAPI。换句话说,我需要在应用程序开始服务请求之前创建一个 Redis 池,并在应用程序完成或即将结束后立即释放该池。问题是 aioredis pool 创建是异步的,而 Tornado Application 创建是同步的。
基本应用程序如下所示:
重要的是我也可以在测试期间使用启动和关闭功能。
有任何想法吗?
django - Django Channels 2:特定房间中有多少用户
我正在使用 django-channels>=2.0.0 并且我想查找“room1”中有多少用户。我不知道如何找到总连接数。
python - 在开发服务器上找不到静态文件 404 django
我在这里尝试了很多解决方案后找不到解决方案,我的问题是我在开发服务器上运行 ASGI 应用程序,我无法获取静态文件或 url,它在本地运行良好,但在服务器上运行不正常
该服务器正在运行 ubuntu 并使用 apache2,我无法部署,因为 apache 不支持 asgi,所以我只想将它作为本地运行,这是服务器上的 apache conf
所以要运行应用程序我应该去http://server/checkAuth2
settings.py BASE_DIR = os.path.abspath(os.path.dirname(文件))
索引.html
静态文件夹的路径:编辑 在此处输入图像描述
当我运行服务器时:我得到这个 url http://server/checkAuth2/checkurl 和我得到的文件:http://server/checkurl/static/css .. 没有找到
感谢您对此的帮助,因为我在这里停留了 3 天,谢谢!
django - 使用线程本地存储问题使用 django 通道进行日志记录
我在调试通过同一段代码的多个请求时遇到问题,因此需要上下文信息。并使用这个stackoverflow的答案 Django logging with user/ip
使用唯一的 request_id 记录每个请求,能够轻松查看每个请求流。但问题是当group_send
django 内部有使用async_to_sync
.
由于代码在不同的线程上运行,线程本地存储在这种情况下将不起作用,有没有可能将线程本地存储传播到子线程的方法?
我还在文档中发现
async_to_sync
“Threadlocals 和 contextvars 值在两个方向上都保留在边界上。”。这是否意味着线程局部变量以某种方式共享?如果是这样,为什么记录器无法获取该线程局部变量?无论如何要正确记录 django 视图,包含所有请求信息的频道,而不必在每条日志消息上提供额外信息?
谢谢!
该async_to_sync
行的链接:https ://docs.djangoproject.com/en/3.0/topics/async/
python - Gunicorn gevent workers vs Uvicorn ASGI
我目前正在 Django 中开发一项服务,该服务使用缓慢的外部 API(大约需要 10 秒才能得到响应),这意味着与我的服务器的连接保持打开状态等待外部 API 响应,并占用工作人员时间/资源。
我知道我可以使用 gunicorn 的线程或 gevent 工作者来添加并发性,但似乎无法掌握将 gunicorn 与 gevent 工作者和 uvicorn (或任何其他服务器)与 asgi 接口一起使用之间的确切区别。
使用其中一个的标准是什么?
Django 仍然不完全支持 async/await 视图。如果我只坚持 gevent 工人会更好吗?
django - 引入 Django Channels 时是否需要更改我的正常 Django 代码?
您好我是python世界的初学者,所以我仍然在尝试了解使用ASGI时的注意事项。我阅读了一些教程和文档,并在 youtube 上观看了一些视频。但是,我在某些方面不确定。
我有一个使用 Django + Django Rest Framework 的小型后端应用程序。
我的代码非常琐碎,由框架中最常见的概念组成:视图、序列化器、模型、url 等。另外,我使用了关系数据库。
我的环境是这样的:
- 蟒蛇 3.8
- 姜戈 3
- Django 休息框架 3.11
现在,我需要添加对 WebSockets 的支持,并且我做了 Django Channels 教程中描述的基本配置:
- 我安装了 Django Channels 2.4.0 (Daphene 2.5.0)
- 向 INSTALLED_APPS 添加了“频道”
- 我创建了一个带有空 ProtocolTypeRouter 的 routing.py 文件
- 我将 ASGI_APPLICATION 添加到我的 settings.py
- 我将 asgi.py 文件配置为使用通道
- 目前,我还没有配置任何通道层
- 目前,我还没有创建任何 WebSocket 端点
在这些配置之后,运行服务器正在使用 ASGI 开发服务器,显然我的 REST 端点都在工作。
一些问题:
考虑到我所有的代码都是同步的,难道没有必要对其进行任何调整吗?
考虑到它是一个 ASGI 服务器,上面的这个配置已经完成了我的同步代码在 daphene 中安全执行所需的所有魔法?
我能否以可靠和稳定的方式仅使用 ASGI 来处理正常的 HTTP 和 WebSockets 请求?或者,是否建议使用 WSGI 服务 HTTP 流量,只将 WebSockets 流量留给 daphene?
关于同步代码,究竟应该注意哪些地方?
python - Django 3.1 asgi 服务器超时在异步视图中连接到自身
尝试从 Django 3.1 中的异步视图连接到由同一 asgi 服务器提供的同步视图时遇到问题。在普通的 wsgi 开发服务器中这样做是可行的,但在 asgi 服务器中却不行。这似乎有点奇怪。可能我误解了 asgi 的工作原理:)。这是有关如何重现此内容的链接:
这里只是导致问题的观点。也许有人可以通过查看这些内容来立即判断我做错了什么:
“sync_aggregation_view”是在 wsgi 中工作但不能通过 asgi 工作的那个。
python - 使用 uvicorn 运行时,fastapi 找不到模型定义
我想在 fastapi 后端托管一个 pytorch 模型。当我用 python 运行代码时,它工作正常。depickled 模型可以使用定义的类。当使用 uvicorn 启动同一个文件时,它找不到类定义。
源代码如下所示:
当我使用它运行它时,python main.py
它工作正常并且我得到了结果。当我运行它 uvicorn main:app
并发送请求时,我收到以下错误:
两者都应该使用相同的 python 环境,因为我在环境中使用 uvicorn。
我希望有人知道我的设置或代码有什么问题。
更新堆栈跟踪:
python - Architecture Flask vs FastAPI
I have been tinkering around Flask and FastAPI to see how it acts as a server.
One of the main things that I would like to know is how Flask and FastAPI deal with multiple requests from multiple clients.
Especially when the code has efficiency issues (long database query time).
So, I tried making a simple code to understand this problem.
The code is simple, when the client access the route, the application sleeps for 10 seconds before it returns results.
It looks something like this:
FastAPI
Flask
Once the applications are up, I tried accessing them at the same time through 2 different chrome clients. The below are the results:
FastAPI
Flask
As you can see, for FastAPI, the code first waits 10 seconds before processing the next request. Whereas for Flask, the code processes the next request while the 10-second sleep is still happening.
Despite doing a bit of googling, there is not really a straight answer on this topic.
If anyone has any comments that can shed some light on this, please drop them in the comments.
Your opinions are all appreciated. Thank you all very much for your time.
EDIT An update on this, I am exploring a bit more and found this concept of Process manager. For example, we can run uvicorn using a process manager (gunicorn). By adding more workers, I am able to achieve something like Flask. Still testing the limits of this, however. https://www.uvicorn.org/deployment/
Thanks to everyone who left comments! Appreciate it.