为什么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可以处理多个请求? 的相关文章

随机推荐