django-simpletask5 0.1.0__tar.gz → 0.1.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.
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/PKG-INFO +9 -1
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/README.md +8 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/apps.py +3 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/publisher.py +2 -1
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/retry_timeout.py +2 -2
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/management/commands/django_simpletask_crontab.py +19 -16
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/PKG-INFO +9 -1
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/pyproject.toml +1 -1
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/LICENSE +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/__init__.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/admin.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/__init__.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/cronjob_registry.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/defaults.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/executor_scanner.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/lock.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/message_queue.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/signals.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/worker_registry.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/dashboards.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/__init__.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/archive.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/base.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/bash_script.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/loader.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/ping_pong.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/python_script.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/simple_request.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/status_check.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/management/__init__.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/management/commands/__init__.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/management/commands/django_simpletask_executor.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/management/commands/django_simpletask_sync_cronjobs.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/migrations/0001_initial.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/migrations/__init__.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/models.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/services/__init__.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/services/archive.py +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/SOURCES.txt +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/dependency_links.txt +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/requires.txt +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/top_level.txt +0 -0
- {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-simpletask5
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Lightweight async task execution framework for Django
|
|
5
5
|
Author-email: rRR0VrFP <rrr0vrfp@qq.com>
|
|
6
6
|
Maintainer-email: rRR0VrFP <rrr0vrfp@qq.com>
|
|
@@ -246,6 +246,14 @@ Worker 消费消息 → 获取分布式锁 → 加载执行器 → 执行并保
|
|
|
246
246
|
- **Worker 注册中心** — 基于 Redis 的 Worker 心跳与状态追踪
|
|
247
247
|
- **Django Admin 集成** — 完整的后台管理界面与仪表盘
|
|
248
248
|
|
|
249
|
+
### 0.1.2
|
|
250
|
+
|
|
251
|
+
- **修复**: 修复 Transaction-Message 排序竞态条件,使用 `transaction.on_commit` 确保消息在事务提交后才发送到队列
|
|
252
|
+
|
|
253
|
+
### 0.1.1
|
|
254
|
+
|
|
255
|
+
- **修复**: 修复 `DjangoSimpletask5Config` 缺少 `ready()` 方法导致信号监听未注册的问题
|
|
256
|
+
|
|
249
257
|
## 许可证
|
|
250
258
|
|
|
251
259
|
MIT
|
|
@@ -209,6 +209,14 @@ Worker 消费消息 → 获取分布式锁 → 加载执行器 → 执行并保
|
|
|
209
209
|
- **Worker 注册中心** — 基于 Redis 的 Worker 心跳与状态追踪
|
|
210
210
|
- **Django Admin 集成** — 完整的后台管理界面与仪表盘
|
|
211
211
|
|
|
212
|
+
### 0.1.2
|
|
213
|
+
|
|
214
|
+
- **修复**: 修复 Transaction-Message 排序竞态条件,使用 `transaction.on_commit` 确保消息在事务提交后才发送到队列
|
|
215
|
+
|
|
216
|
+
### 0.1.1
|
|
217
|
+
|
|
218
|
+
- **修复**: 修复 `DjangoSimpletask5Config` 缺少 `ready()` 方法导致信号监听未注册的问题
|
|
219
|
+
|
|
212
220
|
## 许可证
|
|
213
221
|
|
|
214
222
|
MIT
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
3
|
|
|
4
|
+
from django.db import transaction
|
|
4
5
|
|
|
5
6
|
from django_simpletask5.models import TaskExecution
|
|
6
7
|
from django_simpletask5.core.defaults import DJANGO_SIMPLETASK_DEFAULT_QUEUE
|
|
@@ -31,7 +32,7 @@ def create_and_publish(task, trigger_event, extra_context=None):
|
|
|
31
32
|
)
|
|
32
33
|
execution.save()
|
|
33
34
|
|
|
34
|
-
_publish_message(execution, routing_key=queue_name)
|
|
35
|
+
transaction.on_commit(lambda: _publish_message(execution, routing_key=queue_name))
|
|
35
36
|
|
|
36
37
|
return execution
|
|
37
38
|
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/retry_timeout.py
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
3
|
|
|
4
|
-
from django.db import models
|
|
4
|
+
from django.db import models, transaction
|
|
5
5
|
|
|
6
6
|
from django_simpletask5.models import TaskExecution
|
|
7
7
|
from django_simpletask5.executors.base import BaseExecutor
|
|
@@ -23,7 +23,7 @@ class RetryTimeoutExecutor(BaseExecutor):
|
|
|
23
23
|
exec_record.save(update_fields=['status', 'retry_count', 'updated_at'])
|
|
24
24
|
|
|
25
25
|
from django_simpletask5.core.publisher import _publish_message
|
|
26
|
-
_publish_message(exec_record)
|
|
26
|
+
transaction.on_commit(lambda: _publish_message(exec_record))
|
|
27
27
|
count += 1
|
|
28
28
|
|
|
29
29
|
return json.dumps({
|
|
@@ -5,7 +5,7 @@ import time
|
|
|
5
5
|
from datetime import timedelta
|
|
6
6
|
|
|
7
7
|
from django.core.management.base import BaseCommand
|
|
8
|
-
from django.db import close_old_connections
|
|
8
|
+
from django.db import close_old_connections, transaction
|
|
9
9
|
from django.utils import timezone
|
|
10
10
|
|
|
11
11
|
from django_simpletask5.models import CronJob, TaskExecution
|
|
@@ -148,21 +148,24 @@ class Command(BaseCommand):
|
|
|
148
148
|
)
|
|
149
149
|
execution.save()
|
|
150
150
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
151
|
+
def _publish_cronjob():
|
|
152
|
+
from django_simpletask5.core.message_queue import get_message_queue
|
|
153
|
+
mq = get_message_queue()
|
|
154
|
+
try:
|
|
155
|
+
mq.publish(
|
|
156
|
+
routing_key=DJANGO_SIMPLETASK_DEFAULT_QUEUE,
|
|
157
|
+
message={
|
|
158
|
+
'execution_id': str(execution.execution_id),
|
|
159
|
+
'task_id': None,
|
|
160
|
+
'trigger_event': 'cron',
|
|
161
|
+
'executor_class': cronjob.executor_class,
|
|
162
|
+
},
|
|
163
|
+
)
|
|
164
|
+
logger.info('Triggered cronjob %s -> execution %s', cronjob.name, execution.execution_id)
|
|
165
|
+
except Exception:
|
|
166
|
+
logger.exception('Failed to publish cronjob message for %s', cronjob.name)
|
|
167
|
+
|
|
168
|
+
transaction.on_commit(_publish_cronjob)
|
|
166
169
|
|
|
167
170
|
from django_simpletask5.core.cronjob_registry import _compute_next_run_time
|
|
168
171
|
cronjob.next_run_time = _compute_next_run_time(cronjob.cron_expression, base=timezone.now())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-simpletask5
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Lightweight async task execution framework for Django
|
|
5
5
|
Author-email: rRR0VrFP <rrr0vrfp@qq.com>
|
|
6
6
|
Maintainer-email: rRR0VrFP <rrr0vrfp@qq.com>
|
|
@@ -246,6 +246,14 @@ Worker 消费消息 → 获取分布式锁 → 加载执行器 → 执行并保
|
|
|
246
246
|
- **Worker 注册中心** — 基于 Redis 的 Worker 心跳与状态追踪
|
|
247
247
|
- **Django Admin 集成** — 完整的后台管理界面与仪表盘
|
|
248
248
|
|
|
249
|
+
### 0.1.2
|
|
250
|
+
|
|
251
|
+
- **修复**: 修复 Transaction-Message 排序竞态条件,使用 `transaction.on_commit` 确保消息在事务提交后才发送到队列
|
|
252
|
+
|
|
253
|
+
### 0.1.1
|
|
254
|
+
|
|
255
|
+
- **修复**: 修复 `DjangoSimpletask5Config` 缺少 `ready()` 方法导致信号监听未注册的问题
|
|
256
|
+
|
|
249
257
|
## 许可证
|
|
250
258
|
|
|
251
259
|
MIT
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/cronjob_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/executor_scanner.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/message_queue.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/worker_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/__init__.py
RENAMED
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/archive.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/bash_script.py
RENAMED
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/loader.py
RENAMED
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/ping_pong.py
RENAMED
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/python_script.py
RENAMED
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/simple_request.py
RENAMED
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/status_check.py
RENAMED
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/management/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/migrations/0001_initial.py
RENAMED
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/migrations/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/services/__init__.py
RENAMED
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/services/archive.py
RENAMED
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/requires.txt
RENAMED
|
File without changes
|
{django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|