我正在使用Python APScheduler运行一堆重复的任务,但是对于一些任务,我现在遇到诸如以下的错误:
除此之外,该APscheduler实例运行约十天后,其已用内存量突然从47MiB增至1200MiB,此后,由于计算机内存不足,各种进程都停止了。
因此,要弄清问题的根源,我需要确切地了解哪些调用会导致这些警告。据我了解,发生此错误是因为上一个 call (在此之前一分钟)尚未结束。但是,此错误中的信息相当模糊。函数的名称已给定(getAndStoreExchangeRate
),但是我有多个文件具有这样的函数名称。所以我想知道的是:
有人知道我该如何在某处记录此信息?欢迎所有提示!
[编辑]
因此,我继承了BackgroundScheduler的子类,并重写了
_process_jobs()
方法,在该方法中,我在以下代码段中更改了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),
这可以通过向我显示该函数的参数来实现,但我仍然不知道最重要的事情:定义在哪个文件和哪一行上发生警告的函数。有人知道我该怎么证明吗?
最佳答案
最简单的方法是在_process_jobs()方法中的apscheduler.schedulers.base模块的“MaxInstancesReachedError:”除外块中添加一条额外的日志记录语句。在那里,您可以访问job.func,它是作业的目标功能。
我建议您将选择的调度程序子类化,并复制_process_jobs方法代码。然后修改除MaxInstancesReachedError块之外的代码:
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.func, job.max_instances)
编辑:
函数的文件名: job.func .__ code __。co_filename
行号: job.func .__ code __。co_firSTLineno
关于python - 如何记录更多信息的APScheduler警告?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27178778/