CherryPy性能调整

2024-05-14 16:43:55 发布

您现在位置:Python中文网/ 问答频道 /正文

当空闲时,CherryPy在单核Raspberry Pi第1代上消耗约15-20%的CPU,即根本不处理任何请求。为了减少这种情况,我尝试了各种配置调整,但都没有效果。我怎样才能减少这个

>>> import cherrypy
>>> cherrypy.quickstart()
[29/Apr/2021:14:14:22] ENGINE Listening for SIGTERM.
[29/Apr/2021:14:14:22] ENGINE Listening for SIGHUP.
[29/Apr/2021:14:14:22] ENGINE Listening for SIGUSR1.
[29/Apr/2021:14:14:22] ENGINE Bus STARTING
[29/Apr/2021:14:14:22] ENGINE Started monitor thread 'Autoreloader'.
[29/Apr/2021:14:14:23] ENGINE Serving on http://127.0.0.1
[29/Apr/2021:14:14:23] ENGINE Bus STARTED

top输出:

Tasks:  85 total,   1 running,  84 sleeping,   0 stopped,   0 zombie
%Cpu(s): 23.9 us,  8.9 sy,  0.0 ni, 66.6 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
MiB Mem :    430.1 total,    152.9 free,     76.2 used,    201.0 buff/cache
MiB Swap:    100.0 total,    100.0 free,      0.0 used.    297.3 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                             
10674 root      20   0  131484  21240   8188 S  18.5   4.8   0:45.63 python3                                                                                             
                                                                     

Tags: freeforcpumemengineapr空闲used
1条回答
网友
1楼 · 发布于 2024-05-14 16:43:55

高空闲CPU使用率的原因似乎是CherryPy中使用的cherootHTTP服务器中的内部连接管理器循环。循环包含一个等待并选择下一个连接的命令,但它被赋予一个0.01秒的超时时间,这意味着循环每秒最多迭代100次,这大大增加了空闲CPU的使用。 有关更多详细信息,请参阅GitHub上的以下问题:https://github.com/cherrypy/cheroot/issues/378

此超时一度为0.5秒,然后,为了解决其他更改带来的连接延迟问题,将其降低到0.01秒。同时,这不再是必需的,但只有在Windows上,由于未知的原因,Python的行为似乎有所不同,并导致新连接在此超时之前有额外的延迟。 有关更多详细信息,请参阅以下pull请求,该请求将超时与连接过期时间间隔对齐,默认值为0.5秒:https://github.com/cherrypy/cheroot/pull/352

原因是,在第一视图中,Python在Windows上的行为仍然需要调查,并在案例中报告给Python bug跟踪器。非常感谢您的帮助,使CherryPy(分别为cheroot)再次成为Raspberry Pi 1、Zero和类似的低调硬件的良好选择

相关问题 更多 >

    热门问题