tasktiger 0.26.1__tar.gz → 0.26.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tasktiger-0.26.1/tasktiger.egg-info → tasktiger-0.26.2}/PKG-INFO +1 -1
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/__init__.py +1 -1
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/worker.py +6 -4
- {tasktiger-0.26.1 → tasktiger-0.26.2/tasktiger.egg-info}/PKG-INFO +1 -1
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/tasks.py +10 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/test_workers.py +14 -7
- {tasktiger-0.26.1 → tasktiger-0.26.2}/LICENSE +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/MANIFEST.in +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/README.rst +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/pyproject.toml +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/setup.cfg +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/setup.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/_internal.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/exceptions.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/executor.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/flask_script.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/logging.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/lua/move_task.lua +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/lua/semaphore.lua +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/migrations.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/redis_scripts.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/redis_semaphore.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/retry.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/rollbar.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/runner.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/schedule.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/stats.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/task.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/tasktiger.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/test_helpers.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/timeouts.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/types.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger/utils.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger.egg-info/SOURCES.txt +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger.egg-info/dependency_links.txt +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger.egg-info/entry_points.txt +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger.egg-info/requires.txt +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tasktiger.egg-info/top_level.txt +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/__init__.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/config.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/conftest.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/tasks_periodic.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/test_base.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/test_context_manager.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/test_lazy_init.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/test_logging.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/test_migrations.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/test_periodic.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/test_queue_size.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/test_redis_scripts.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/test_semaphore.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/test_stats.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/test_task.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tests/utils.py +0 -0
- {tasktiger-0.26.1 → tasktiger-0.26.2}/tox.ini +0 -0
|
@@ -4,7 +4,6 @@ import json
|
|
|
4
4
|
import os
|
|
5
5
|
import random
|
|
6
6
|
import signal
|
|
7
|
-
import sys
|
|
8
7
|
import time
|
|
9
8
|
import uuid
|
|
10
9
|
from collections import OrderedDict
|
|
@@ -832,10 +831,13 @@ class Worker:
|
|
|
832
831
|
runner = runner_class(self.tiger)
|
|
833
832
|
runner.on_permanent_error(task, execution)
|
|
834
833
|
|
|
835
|
-
#
|
|
836
|
-
#
|
|
834
|
+
# Force the process to exit after a task times out. A normal interpreter
|
|
835
|
+
# shutdown can wait indefinitely for threads started by the task.
|
|
837
836
|
if self.executor.exit_worker_on_job_timeout and has_job_timeout:
|
|
838
|
-
|
|
837
|
+
try:
|
|
838
|
+
os.write(2, b"exiting worker due to job timeout error\n")
|
|
839
|
+
finally:
|
|
840
|
+
os._exit(1)
|
|
839
841
|
|
|
840
842
|
def _worker_run(self) -> None:
|
|
841
843
|
"""
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
+
import threading
|
|
2
3
|
import time
|
|
3
4
|
from math import ceil
|
|
4
5
|
|
|
@@ -54,6 +55,15 @@ def long_task_killed():
|
|
|
54
55
|
time.sleep(DELAY * 2)
|
|
55
56
|
|
|
56
57
|
|
|
58
|
+
@tiger.task(hard_timeout=DELAY)
|
|
59
|
+
def long_task_with_blocked_thread():
|
|
60
|
+
blocker = threading.Event()
|
|
61
|
+
# A non-daemon thread makes normal interpreter shutdown wait indefinitely.
|
|
62
|
+
thread = threading.Thread(target=blocker.wait, daemon=False)
|
|
63
|
+
thread.start()
|
|
64
|
+
time.sleep(DELAY * 2)
|
|
65
|
+
|
|
66
|
+
|
|
57
67
|
@tiger.task(hard_timeout=DELAY * 2)
|
|
58
68
|
def long_task_ok():
|
|
59
69
|
# Signal task has started
|
|
@@ -4,7 +4,6 @@ import datetime
|
|
|
4
4
|
import time
|
|
5
5
|
from multiprocessing import Process
|
|
6
6
|
|
|
7
|
-
import pytest
|
|
8
7
|
from freezefrog import FreezeTime
|
|
9
8
|
|
|
10
9
|
from tasktiger import Task, Worker
|
|
@@ -15,8 +14,8 @@ from tasktiger.worker import LOCK_REDIS_KEY
|
|
|
15
14
|
from .config import DELAY
|
|
16
15
|
from .tasks import (
|
|
17
16
|
exception_task,
|
|
18
|
-
long_task_killed,
|
|
19
17
|
long_task_ok,
|
|
18
|
+
long_task_with_blocked_thread,
|
|
20
19
|
simple_task,
|
|
21
20
|
sleep_task,
|
|
22
21
|
system_exit_task,
|
|
@@ -182,11 +181,19 @@ class TestSyncExecutorWorker:
|
|
|
182
181
|
ensure_queues(error={"default": 1})
|
|
183
182
|
|
|
184
183
|
def test_handles_timeout(self, tiger, ensure_queues):
|
|
185
|
-
Task(tiger,
|
|
186
|
-
worker =
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
184
|
+
Task(tiger, long_task_with_blocked_thread).delay()
|
|
185
|
+
worker = Process(
|
|
186
|
+
target=external_worker,
|
|
187
|
+
kwargs={"worker_kwargs": {"executor_class": SyncExecutor}},
|
|
188
|
+
)
|
|
189
|
+
worker.start()
|
|
190
|
+
worker.join(timeout=DELAY * 5)
|
|
191
|
+
try:
|
|
192
|
+
assert worker.exitcode == 1
|
|
193
|
+
finally:
|
|
194
|
+
if worker.is_alive():
|
|
195
|
+
worker.kill()
|
|
196
|
+
worker.join()
|
|
190
197
|
ensure_queues(error={"default": 1})
|
|
191
198
|
|
|
192
199
|
def test_heartbeat(self, tiger):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|