mdbq 4.2.13__py3-none-any.whl → 4.2.14__py3-none-any.whl

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.

Potentially problematic release.


This version of mdbq might be problematic. Click here for more details.

mdbq/__version__.py CHANGED
@@ -1 +1 @@
1
- VERSION = '4.2.13'
1
+ VERSION = '4.2.14'
mdbq/route/monitor.py CHANGED
@@ -929,7 +929,7 @@ class RouteMonitor:
929
929
  """
930
930
  从 Redis 队列中消费任务并写入数据库(用于单独的消费者进程)
931
931
 
932
- 这个方法应该在单独的进程中循环调用,不要在 uwsgi worker 中调用!
932
+ 这个方法应该在单独的进程中循环调用
933
933
 
934
934
  Args:
935
935
  batch_size: 每次处理的最大任务数
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mdbq
3
- Version: 4.2.13
3
+ Version: 4.2.14
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1,5 +1,5 @@
1
1
  mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
2
- mdbq/__version__.py,sha256=zsZCfTo9vIRDK8zLekhuOsr5TmqS2lKNUNy9gK21dI0,18
2
+ mdbq/__version__.py,sha256=cr0O8LE2OkusCNWIOsW9RXnz5146D47fEK2fLTbqnUU,18
3
3
  mdbq/auth/__init__.py,sha256=pnPMAt63sh1B6kEvmutUuro46zVf2v2YDAG7q-jV_To,24
4
4
  mdbq/auth/auth_backend.py,sha256=iLN7AqiSq7fQgFtNtge_TIlVOR1hrCSZXH6oId6uGX4,116924
5
5
  mdbq/auth/crypto.py,sha256=M0i4dRljJuE30WH_13ythA2QGKPXZm6TgpnYp6aHOzw,17431
@@ -30,13 +30,12 @@ mdbq/redis/getredis.py,sha256=vdg7YQEjhoMp5QzxygNGx5DQKRnePrcwPYgUrDypA6g,23672
30
30
  mdbq/redis/redis_cache.py,sha256=JWarX_l7LvdKyxtUNPANAqd-y20Jg5uqmllCbT-fyv8,45752
31
31
  mdbq/route/__init__.py,sha256=BT_dAY7V-U2o72bevq1B9Mq9QA7GodwtkxyLNdGaoE8,22
32
32
  mdbq/route/analytics.py,sha256=dngj5hVwKddEUy59nSYbOoJ9C7OVrtCmCkvW6Uj9RYM,28097
33
- mdbq/route/monitor.py,sha256=k78g1NDBpftoOJl2rxaw-OoGQPAahI7feQ5C8XENiyo,40776
34
- mdbq/route/monitor_worker.py,sha256=HlMr9s1mcYaomTLY_-vimAm5xK9hBWkR68JFNjLcr0c,4104
33
+ mdbq/route/monitor.py,sha256=mY55Y2m0c_1fmC2A6GNWvkSbW3OsXPs3jOI-9HHTYMw,40738
35
34
  mdbq/route/routes.py,sha256=QVGfTvDgu0CpcKCvk1ra74H8uojgqTLUav1fnVAqLEA,29433
36
35
  mdbq/selenium/__init__.py,sha256=AKzeEceqZyvqn2dEDoJSzDQnbuENkJSHAlbHAD0u0ZI,10
37
36
  mdbq/selenium/get_driver.py,sha256=1NTlVUE6QsyjTrVVVqTO2LOnYf578ccFWlWnvIXGtic,20903
38
37
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
39
- mdbq-4.2.13.dist-info/METADATA,sha256=vRP7TVDetxdHucimnQ98E_rMf7ceAVjj4d2OGpMvhTY,364
40
- mdbq-4.2.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
41
- mdbq-4.2.13.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
42
- mdbq-4.2.13.dist-info/RECORD,,
38
+ mdbq-4.2.14.dist-info/METADATA,sha256=aNX05FUtA3v3lVAh0N2n7q8Wp-usLo5yXiL4H5qN9Lc,364
39
+ mdbq-4.2.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
+ mdbq-4.2.14.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
41
+ mdbq-4.2.14.dist-info/RECORD,,
@@ -1,152 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- """
4
- API 监控系统 - 队列消费者进程
5
-
6
- 这是一个单独运行的守护进程,从 Redis 队列中消费监控任务并写入数据库。
7
- 在 uwsgi 多进程环境下,只需运行一个或多个此进程即可处理所有 worker 的监控数据。
8
-
9
- 使用方法:
10
- python -m mdbq.route.monitor_worker
11
-
12
- 或通过 systemd/supervisor 管理:
13
- supervisorctl start api_monitor_worker
14
- """
15
-
16
- import os
17
- import sys
18
- import time
19
- import signal
20
- from typing import Optional
21
-
22
-
23
- class MonitorWorker:
24
- """监控任务队列消费者"""
25
-
26
- def __init__(self, redis_client, database: str = 'api监控系统', pool=None):
27
- """
28
- 初始化消费者
29
-
30
- Args:
31
- redis_client: Redis 客户端实例
32
- database: 监控数据库名称
33
- pool: 数据库连接池(可选)
34
- """
35
- from mdbq.route.monitor import RouteMonitor
36
-
37
- self.monitor = RouteMonitor(
38
- database=database,
39
- pool=pool,
40
- redis_client=redis_client,
41
- enable_async=True
42
- )
43
- self.running = True
44
- self.processed_total = 0
45
-
46
- # 注册信号处理
47
- signal.signal(signal.SIGINT, self._handle_signal)
48
- signal.signal(signal.SIGTERM, self._handle_signal)
49
-
50
- def _handle_signal(self, signum, frame):
51
- """处理关闭信号"""
52
- self.running = False
53
-
54
- def run(self, batch_size: int = 100, sleep_interval: float = 0.1):
55
- """
56
- 运行消费者主循环
57
-
58
- Args:
59
- batch_size: 每次处理的最大任务数
60
- sleep_interval: 队列为空时的休眠间隔(秒)
61
- """
62
- last_log_time = time.time()
63
- log_interval = 60 # 每60秒输出一次统计
64
-
65
- try:
66
- while self.running:
67
- # 消费一批任务
68
- processed = self.monitor.consume_queue_tasks(
69
- batch_size=batch_size,
70
- timeout=1.0
71
- )
72
-
73
- self.processed_total += processed
74
-
75
- # 定期输出统计信息
76
- current_time = time.time()
77
- if current_time - last_log_time >= log_interval:
78
- last_log_time = current_time
79
-
80
- # 如果队列为空,短暂休眠
81
- if processed == 0:
82
- time.sleep(sleep_interval)
83
-
84
- except Exception as e:
85
- pass
86
-
87
-
88
- def create_worker_from_config(config_file: Optional[str] = None):
89
- """
90
- 从配置文件创建消费者实例
91
-
92
- Args:
93
- config_file: 配置文件路径(可选,默认 ~/spd.txt)
94
-
95
- Returns:
96
- MonitorWorker: 消费者实例
97
- """
98
- try:
99
- import redis
100
- from mdbq.myconf import myconf
101
-
102
- # 读取配置
103
- if config_file is None:
104
- config_file = os.path.join(os.path.expanduser("~"), 'spd.txt')
105
-
106
- parser = myconf.ConfigParser()
107
- redis_password = parser.get_value(
108
- file_path=config_file,
109
- section='redis',
110
- key='password',
111
- value_type=str
112
- )
113
-
114
- # 创建 Redis 客户端
115
- redis_client = redis.Redis(
116
- host='127.0.0.1',
117
- port=6379,
118
- db=0,
119
- password=redis_password,
120
- decode_responses=False,
121
- socket_timeout=5,
122
- socket_connect_timeout=3
123
- )
124
-
125
- # 创建消费者
126
- worker = MonitorWorker(
127
- redis_client=redis_client,
128
- database='api监控系统'
129
- )
130
-
131
- return worker
132
-
133
- except Exception as e:
134
- sys.exit(1)
135
-
136
-
137
- def main():
138
- """主函数"""
139
-
140
- # 创建消费者
141
- worker = create_worker_from_config()
142
-
143
- # 运行消费者
144
- worker.run(
145
- batch_size=100, # 每次处理100个任务
146
- sleep_interval=0.5 # 队列空时休眠0.5秒
147
- )
148
-
149
-
150
- if __name__ == '__main__':
151
- main()
152
-
File without changes