gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:31:05 28 4
gpt4 key购买 nike

根据 Django is synchronous or asynchronous . Django 是同步的。但是我用 python manage.py runserver 8100 测试了阻塞 View :

    import time
@action(detail=False, methods=['get'])
def test(self, request):
time.sleep(5)
return {}
并在 0 秒、1 秒触发了 postman 的两个请求,他们在 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然后再试一次。现在您应该能够可视化完整的同步行为。

关于django - 为什么Django可以处理多个请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64980287/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com