gpt4 book ai didi

python - 为什么 gunicorn 使用相同的线程

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

一个简单的 python 名称 myapp.py:


import threading
import os

def app(environ, start_response):
tid = threading.get_ident()
pid = os.getpid()
ppid = os.getppid()

# #####
print('tid ================ ', tid) # why same tid?
# #####
print('pid', pid) #
print('ppid', ppid) #

data = b"Hello, World!\n"
start_response("200 OK", [
("Content-Type", "text/plain"),
("Content-Length", str(len(data)))
])
return iter([data])

我从 gunicorn 开始:gunicorn -w 4 myapp:app

[2022-03-28 21:59:57 +0800] [55107] [INFO] Starting gunicorn 20.1.0
[2022-03-28 21:59:57 +0800] [55107] [INFO] Listening at: http://127.0.0.1:8000 (55107)
[2022-03-28 21:59:57 +0800] [55107] [INFO] Using worker: sync
[2022-03-28 21:59:57 +0800] [55110] [INFO] Booting worker with pid: 55110
[2022-03-28 21:59:57 +0800] [55111] [INFO] Booting worker with pid: 55111
[2022-03-28 21:59:57 +0800] [55112] [INFO] Booting worker with pid: 55112
[2022-03-28 21:59:57 +0800] [55113] [INFO] Booting worker with pid: 55113

然后我 curl http://127.0.0.1:8000/ (或使用浏览器)。日志如下:

tid ================  4455738816
pid 55112
ppid 55107
tid ================ 4455738816
pid 55111
ppid 55107
tid ================ 4455738816
pid 55113
ppid 55107

问题是为什么tid相同但pid不同

ps:代码来自https://gunicorn.org/主页。

最佳答案

Gunicorn 创建多个进程以避免 Python GIL。每个进程都有一个唯一的 PID。


关于线程, threading.get_ident()是 Python 特定的线程标识符,应将其视为无意义且仅在本地进程内相关。

相反,您应该使用 threading.get_native_id()它返回唯一的系统范围线程标识符。

请记住,后者可能会在线程关闭时被回收和重复使用。

关于python - 为什么 gunicorn 使用相同的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71648826/

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