对于Web项目,我们运行5个python进程。当我们为其中一个进程分配了一个巨大的CPU密集型任务时,该进程的cpu使用率达到了100%。然后逐一逐步,所有5个进程达到cpu使用率100%,最终都变得无响应!我的问题是,一个流程的繁重任务如何影响其他流程?
这是大局,完整的情景详情:
我们正在使用 Tornado 网络服务器。我们正在运行5个Tornado进程(由supervisor管理)。我们在所有5个龙卷风进程前都有nginx,用于循环处理顺序的负载平衡。即第一个Web请求将被发送到第一个Tornado进程,第二个Web请求将被发送到第二个Tornado进程,依此类推。
现在,我们有一个巨大的PDF生成任务(使用ReportLab 3)。我们从服务器发出请求,nginx将其传递给Tornado进程。进程使用(通过top
命令看到)变为100%。然后逐渐接连,所有过程使用率变为100%,屏幕截图如下:
并且不再处理任何其他网络请求。
我的问题是,为什么一个python进程中的cpu密集型任务阻碍了其他python进程?我们正在使用 python 3 。
答案 0 :(得分:0)
狂野猜测:您的设置是这样的,即主管或nginx认为Python进程无法使用,并自动将相同的请求发送到下一个Python进程。或者,用户在浏览器中单击“重新加载”或其他任何内容。
也许你应该修改你的Python进程来记录他们将要做的事情(在长期任务之前记录,而不是之后)。这样你就可以检查我的猜测是否正确。