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

Adv*_*are 6 python apscheduler python-3.5

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

use*_*992 5

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

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

向我推荐了在运行后删除作业。但这在运行 cron 和间隔作业时当然是个坏主意,因为它们不会再次运行。

什么终于解开了它扭捏threadpoolexecutioner(降低工人的最大数量),见#2这个答案这个这个职位Github上。我绝对建议您阅读有关此的文档

其他诊断资源:12

示例代码:

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()
Run Code Online (Sandbox Code Playgroud)

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

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