gpt4 book ai didi

python - 即使作业成功完成,内存使用率也不会降低

转载 作者:行者123 更新时间:2023-12-03 14:35:54 25 4
gpt4 key购买 nike

我在 apscheduler 中添加了一个作业,它在内存中加载了一些数据,并且在作业完成后我将删除所有对象。现在,如果我使用 python 运行此作业,它会成功运行,并且进程成功退出后内存会下降。但在 apscheduler 的情况下,内存使用量不会下降。我正在使用 BackgroundScheduler。提前致谢。

最佳答案

我通过 apscheduler 运行了很多任务。我怀疑这个设置会导致 Heroku 上的 R14 错误,每天都会发生 dyno 内存过载、崩溃和重启。所以我启动了另一个 dyno 并安排了一些非常频繁地运行的作业。

观察 Heroku 中的指标选项卡,很快就发现 apscheduler 是罪魁祸首。

Removing jobs after they're run被推荐给我。但这在运行 cron 和间隔作业时当然是个坏主意,因为它们不会再次运行。

最终解决的是调整线程池执行器(降低最大 worker 数),see this answer on Stackoverflowthisthis在 Github 上发帖。我绝对建议你read the docs on this .

其他诊断资源:1 , 2 .

示例代码:

import logging
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
from apscheduler.schedulers.blocking import BlockingScheduler
from tests import overloadcheck

logging.basicConfig()
logging.getLogger('apscheduler').setLevel(logging.DEBUG)

sched = BlockingScheduler(
executors={
'threadpool': ThreadPoolExecutor(max_workers=9),
'processpool': ProcessPoolExecutor(max_workers=3)
}
)

@sched.scheduled_job('interval', minutes=10, executor='threadpool')
def message_overloadcheck():
overloadcheck()

sched.start()

或者,如果你喜欢我,喜欢运行繁重的任务 - 尝试使用 ProcessPoolExecutor 作为替代方案,或添加到 ThreadPool,但确保在这种情况下从特定作业调用它。

更新:而且,如果您想使用它,您还需要导入 ProcessPoolExecutor,将其添加到代码中。

关于python - 即使作业成功完成,内存使用率也不会降低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46301647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com