我正在使用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/

    10-14 01:00