当空闲时,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
高空闲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和类似的低调硬件的良好选择
相关问题 更多 >
编程相关推荐