diff options
author | Alex Grönholm <alex.gronholm@nextday.fi> | 2017-12-09 18:58:38 +0200 |
---|---|---|
committer | Alex Grönholm <alex.gronholm@nextday.fi> | 2017-12-09 19:02:58 +0200 |
commit | 0a85a0a1375271929d6f708ae74fab59a4b5c04a (patch) | |
tree | be3673f6c51935f5d8c1ed628662f4e14109f406 /tests | |
parent | ad9109042b727fe1366b7f1b10382766a9a3469f (diff) | |
download | apscheduler-0a85a0a1375271929d6f708ae74fab59a4b5c04a.tar.gz |
Fixed memory leak when scheduled jobs raise exceptions
Fixes #235.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_executors.py | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/tests/test_executors.py b/tests/test_executors.py index 2e90c17..d4aa221 100644 --- a/tests/test_executors.py +++ b/tests/test_executors.py @@ -1,12 +1,15 @@ from datetime import datetime from threading import Event from types import TracebackType +import gc import time import pytest +from pytz import UTC from apscheduler.events import EVENT_JOB_ERROR, EVENT_JOB_MISSED, EVENT_JOB_EXECUTED -from apscheduler.executors.base import MaxInstancesReachedError +from apscheduler.executors.base import MaxInstancesReachedError, run_job +from apscheduler.job import Job from apscheduler.schedulers.base import BaseScheduler try: @@ -124,3 +127,19 @@ def test_run_job_error(monkeypatch, executor): assert str(exc_traceback[0]) == "dummy" if exc_traceback[1] is not None: assert isinstance(exc_traceback[1], TracebackType) + + +def test_run_job_memory_leak(): + class FooBar(object): + pass + + def func(): + foo = FooBar() # noqa: F841 + raise Exception('dummy') + + fake_job = Mock(Job, func=func, args=(), kwargs={}, misfire_grace_time=1) + for _ in range(5): + run_job(fake_job, 'foo', [datetime.now(UTC)], __name__) + + foos = [x for x in gc.get_objects() if type(x) is FooBar] + assert len(foos) == 0 |