You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hypercorn运行出现重复进程问题求助

Hypercorn启动重复进程导致任务执行两次的问题

我不确定这是否是Hypercorn的问题,但想不到其他可能原因。已搜索网络但未找到类似问题。

环境:Ubuntu 20.04系统、Python3.8.10

运行Hypercorn服务器时,后台会启动重复进程,进程信息如下:

root     2278497  0.8  0.1  41872 33568 pts/7    S    10:03   0:00 /usr/bin/python3 /usr/local/bin/hypercorn -c config.toml main:app --reload
root     2278499  0.0  0.0  17304 11332 pts/7    S    10:03   0:00 /usr/bin/python3 -c from multiprocessing.resource_tracker import main;main(4)
root     2278500  0.7  0.1  41648 34148 pts/7    S    10:03   0:00 /usr/bin/python3 -c from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=5, pipe_handle=7) --multiprocessing-fork

主进程为2278497,但存在2278499和2278500两个额外进程,不清楚它们的启动原因。这会导致同一任务被执行两次,请问如何避免这种情况?

编辑补充:最小复现代码示例

# test_main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

print("main module loaded.")

执行命令:

sudo hypercorn test_main:app

标准输出:

main module loaded.
main module loaded.
[2022-11-02 15:08:45 +0100] [2364437] [INFO] Running on http://127.0.0.1:8000 (CTRL + C to quit)

问题原因与解决方法

原因分析

Hypercorn默认会以多进程模式启动(未指定worker数量时,会根据CPU核心数自动创建worker进程),每个worker都会加载一次你的应用模块,因此会出现多次打印main module loaded.的情况。另外,resource_tracker是Python multiprocessing模块自带的资源跟踪辅助进程,属于正常系统进程,无需额外处理。

解决方法

  1. 指定单worker进程启动
    在启动命令中添加--workers 1参数,强制Hypercorn只启动一个worker进程:

    sudo hypercorn test_main:app --workers 1
    

    这样模块只会被加载一次,也不会出现额外的业务worker进程。

  2. 调整模块内任务执行时机
    如果你的任务是在模块加载时执行(比如示例中的print),可以将其放到if __name__ == "__main__":块中,确保只有直接运行脚本时才执行,避免worker进程重复执行:

test_main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
return {"message": "Hello World"}

if name == "main":
print("main module loaded.")

3. **通过配置文件指定worker数量**
若使用`config.toml`配置文件,在文件中添加:
```toml
workers = 1

启动时加载配置文件即可:

sudo hypercorn -c config.toml main:app --reload

内容的提问来源于stack exchange,提问作者stev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:55:12