为什么Django可以处理多个请求?

2024-01-07

根据。 Django 是同步的。但是我测试了阻塞视图python manage.py runserver 8100:

    import time
    @action(detail=False, methods=['get'])
    def test(self, request):
        time.sleep(5)
        return {}

并在 0 秒、1 秒时向邮递员触发了两个请求,并在 5 秒、6 秒返回。这似乎不是阻塞/同步的。我哪里错了?


即使同步实现通常也会“并行”处理多个请求。

他们通过使用多进程、多线程或它们的组合来实现这一点。

根据服务器的不同,它们具有预定义(固定)数量的进程或线程,或者每当另一个请求需要线程或进程时,它们就会动态分配线程或进程。

另一方面,异步服务器可以仅在一个线程/进程内“并行”处理多个请求。

您可以从简单的开发服务器开始management.py runserver默认使用线程。

为了最好地形象化这一点,我建议将您的代码更改为:

import time
import os
import threading

@action(detail=False, methods=['get'])
def test(self, request):
    print("START PID", os.getpid(), "TID", threading.get_native_id())
    time.sleep(5)
    print("STOP  PID", os.getpid(), "TID", threading.get_native_id())
    return {pid=os.getpid(), tid=threading.get_native_id()}

正如 @xyres 提到的:有一个命令行选项可以禁用线程。

赶紧跑manage.py runserver --nothreading然后再试一次。现在您应该能够可视化完整的同步行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Django可以处理多个请求? 的相关文章

  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • Nginx 与 Daphne 给出 502 Bad Gateway

    由于 Django Channels 和 uwsgi 出现问题 我决定用 daphne 替换 uwsgi 关注后this http masnun rocks 2016 11 02 deploying django channels usin
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 使用多处理池更新 Django 模型会锁定数据库

    我使用 Jupyter Notebook 来处理我存储在 django postgres 中的数据 我这样初始化我的项目 sys path append srv gr prg os environ setdefault DJANGO SET
  • 如何自动更新外键以具有“,on_delete = models.PROTECT”

    我正在将旧代码更新到最新的 Django 版本 外键需要 on delete models PROTECT 他们有将近一百个 如何自动添加 on delete models PROTECT 到每一个 您可以尝试在这里使用正则表达式 鉴于Fo
  • Django 管理员更改用户密码

    我是 Django 新手 我有以下代码 Model class MyUser AbstractUser profile models OneToOneField Profile null True on delete models PROT
  • Django-多个端口上的会话 cookie 和站点

    我有多个 Django 项目在一台服务器上运行 使用gunicorn http gunicorn org and nginx http wiki nginx org 目前 它们都被配置为使用 nginx 中的服务器指令在同一 IP 地址的唯
  • 在 Django 中使用 path() 找不到 404

    我刚刚查看 django 并尝试通过视图列出书籍id作为 URL 的参数books urls py 但出现 404 页面未找到错误 当我在浏览器中输入此网址时 我没有发现网址有什么问题 http 192 168 0 106 8000 boo
  • Django 检索 GET 列表

    我是 Django 新手 我有一个 URL 列表 例如 example com item test item for test url 我知道如何在视图中检索该值 a request GET getlist item 我的问题是 如何在模板
  • 升级到 1.8.1 后 Django 管理中断

    我从 1 7 3 升级到 1 8 1 但我的管理员无法工作 并且站点无法加载 因为它在解析路径时失败 例外 Enable django contrib auth context processors auth in your TEMPLAT
  • Django 简单历史 - save_without_historical_record() 对我不起作用

    我花了两天时间努力完成这项工作 我正在尝试使用 Django Simple History 进行记录而不保存历史记录 情况如下 我有一个模型 class Artikel models Model treaty models ForeignK
  • 在 django 中处理图像上传表单:何时使用 save()、chunks() 和 clean_data?

    我已经使用以下代码成功上传了图像 views py from django conf urls defaults import from django http import HttpResponse HttpResponseRedirec
  • Django User 模型,添加功能

    我想向 Django 的默认用户模型添加一个新函数 用于检索模型类型的相关列表 这样的 Foo 模型 class Foo models Model owner models ForeignKey User related name owne
  • 更改 django 中的项目名称

    我将 django 项目的名称从oldname to newname使用 Pycharm 的重构 gt 重命名 我翻遍了这个项目 似乎到处都改了名字 但是当我尝试 runserver 时 这就是我得到的 Traceback most rec
  • 404因为重新启动webpack-dev-server

    当我尝试更改反应组件并保存它以查看热加载器是否更新了我的页面时 我在开发人员工具中得到了这个 GET http localhost 3000 public bundle 76566a1ad7e45b834d4e hot update jso
  • Django 1.11 我们可以在两个不同数据库的表之间创建关系吗?

    在我的项目中 我试图创建具有多个数据库的中央数据库服务 所以我的问题是我们可以在两个不同数据库的表之间创建关系吗 Example MySQL DB1 表用户 class User models Model name models CharF
  • 如何在 Django 序列化器中使用主键

    我的模型是 class UserInfo models Model user models OneToOneField User unique True mobile no models CharField max length 10 bl
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • API 端点的 Django 子域配置

    我已经建立了一个 Django 项目 它使用django rest framework提供一些 ReST 功能 网站和其他功能都运行良好 然而有一个小问题 我需要我的 API 端点指向一个不同的子域 例如 当用户访问该网站时 他 她可以根据
  • Django css文件缓存

    我有一个 css 文件 我想修改它以满足我的需要 问题是它似乎被缓存在某个地方 因为无论我在 css 文件中做什么 我都看不到更改 我确信我指向了正确的文件 因为现在我已经对其进行了修改 并且它有效 有什么设置可以关闭缓存吗 谢谢 正如本文

随机推荐