子python进程陷入困境

时间:2019-10-07 20:53:31

标签: python docker flask aws-fargate

在开始之前,我正在Python容器(AWS Fargate)中进行所有操作,因此存在一些局限性。

我正在使用Flask模块运行Web服务器,并生成带有多处理模块的永久子进程来运行重复的后台任务。一切正常,但到了晚上,子进程被随机卡住,没有日志或痕迹。我什至运行了一个自定义的运行状况检查,以确保它仍然有效,但是它停止工作,CPU使用率下降,我不知道发生了什么。它正在执行许多网络呼叫,但我希望它在超时时终止,而不是挂起。在工作期间,CPU使用率稳定在40%左右,而RAM恒定为18%。可能它用完了文件描述符,但为什么会这样?

代码如下:

from flask import Flask
from multiprocessing import Process
import time

def poll():
    while True:
        blablabla
        time.sleep(60)

p = Process(target=poll)
p.start()
p.join

app = Flask(__name__)

@app.route('/', methods=['GET'])
def java():
    return app.send_static_file('java.html')

我不能使用任何超时,因为子进程可以无限期地运行,并且我不能每隔几分钟生成一个新进程,因为容器的内核很快就会用完PID。我也看不到如何使用“ try”,因为它不会失败,只会变得无响应。

从技术上讲,我可以为该子作业运行另一个容器,但我想知道是否有更好的解决方案?

谢谢

1 个答案:

答案 0 :(得分:0)

除非退出blahblahblah,否则poll()将无限期地循环,并且您的初始过程将停留在等待永远不会发生的.join()上。

https://docs.python.org/3/library/multiprocessing.html#multiprocessing.Process.join