即使同步实现通常也会“并行”处理多个请求。
他们通过使用多进程、多线程或它们的组合来实现这一点。
根据服务器的不同,它们具有预定义(固定)数量的进程或线程,或者每当另一个请求需要线程或进程时,它们就会动态分配线程或进程。
另一方面,异步服务器可以仅在一个线程/进程内“并行”处理多个请求。
您可以从简单的开发服务器开始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
然后再试一次。现在您应该能够可视化完整的同步行为。