【发布时间】:2014-11-27 21:19:27
【问题描述】:
我正在使用Python APScheduler 运行一堆重复性任务,但是对于一些任务,我现在遇到如下错误:
警告:apscheduler.scheduler:执行作业“getAndStoreExchangeRate(触发器:cron [minute='*'],下次运行时间:2014-11-06 18:48:00 CET)”已跳过:运行实例的最大数量达到 (1)
除此之外,这个 APscheduler 实例的使用内存量在运行大约十天后突然上升,从大约 47MiB 到 1200MiB,之后各种进程都因为机器内存不足而停止。
因此,要找到问题的根源,我需要准确了解哪些调用会导致这些警告。据我了解,发生此错误是因为上一个呼叫(此呼叫前一分钟)尚未结束。但是,此错误中的信息相当模糊。给出了函数的名称(getAndStoreExchangeRate),但我有多个文件,其中的函数名为这样。所以我想知道的是:
- 此函数在哪个文件的哪一行出现警告?
- 为该函数提供了哪些参数?
有人知道我如何在某处记录这些信息吗?欢迎所有提示!
[编辑]
所以我继承了 BackgroundScheduler 并覆盖了 _process_jobs() 方法,在该方法中我在这个 sn-p 中更改了 self._logger.warning:
try:
executor.submit_job(job, run_times)
except MaxInstancesReachedError:
self._logger.warning(
'Execution of job "%s" skipped: maximum number of running instances reached (%d)',
job, job.max_instances
)
except:
self._logger.exception('Error submitting job "%s" to executor "%s"', job, job.executor)
到这里:
'Execution of job "%s" skipped: maximum number of running instances reached (%d) =-= ARGS: ' + str(job.args) + ' - KWARGS: ' + str(job.kwargs),
这有效,因为它向我显示了给函数的参数,但我仍然不知道最重要的事情:在哪个文件中以及在哪一行上定义了发生警告的函数。有谁知道我怎么能证明这一点?
【问题讨论】:
-
了解您正在运行的 APScheduler 版本会很有用。
-
@AlexGrönholm - 啊,我忘了说;我正在运行版本 3.0.0..
-
@AlexGrönholm - 看到您询问版本,您知道我如何存储此函数的文件名、行号和参数吗?我有点迷路了……
标签: python logging error-handling apscheduler