在开始之前,我正在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”,因为它不会失败,只会变得无响应。
从技术上讲,我可以为该子作业运行另一个容器,但我想知道是否有更好的解决方案?
谢谢
答案 0 :(得分:0)
除非退出blahblahblah
,否则poll()
将无限期地循环,并且您的初始过程将停留在等待永远不会发生的.join()
上。
https://docs.python.org/3/library/multiprocessing.html#multiprocessing.Process.join