funboost 44.2__py3-none-any.whl → 44.4__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 funboost might be problematic. Click here for more details.
- funboost/__init__.py +1 -1
- funboost/concurrent_pool/async_helper.py +3 -1
- funboost/consumers/base_consumer.py +30 -23
- funboost/consumers/http_consumer.py +1 -1
- funboost/consumers/http_consumer000.py +1 -2
- funboost/consumers/httpsqs_consumer.py +1 -1
- funboost/consumers/kafka_consumer.py +1 -1
- funboost/consumers/kafka_consumer_manually_commit.py +2 -2
- funboost/consumers/kombu_consumer.py +0 -1
- funboost/consumers/local_python_queue_consumer.py +2 -3
- funboost/consumers/memory_deque_consumer.py +0 -3
- funboost/consumers/mongomq_consumer.py +0 -1
- funboost/consumers/mqtt_consumer.py +1 -1
- funboost/consumers/nats_consumer.py +1 -1
- funboost/consumers/nsq_consumer.py +1 -2
- funboost/consumers/peewee_conusmer.py +1 -2
- funboost/consumers/persist_queue_consumer.py +1 -2
- funboost/consumers/pulsar_consumer.py +1 -2
- funboost/consumers/rabbitmq_amqpstorm_consumer.py +0 -2
- funboost/consumers/rabbitmq_pika_consumer.py +0 -2
- funboost/consumers/rabbitmq_pika_consumerv0.py +0 -1
- funboost/consumers/rabbitmq_rabbitpy_consumer.py +1 -2
- funboost/consumers/redis_brpoplpush_consumer.py +1 -3
- funboost/consumers/redis_consumer.py +4 -8
- funboost/consumers/redis_consumer_ack_able.py +5 -10
- funboost/consumers/redis_consumer_priority.py +3 -7
- funboost/consumers/redis_consumer_simple.py +2 -3
- funboost/consumers/redis_pubsub_consumer.py +3 -3
- funboost/consumers/redis_stream_consumer.py +3 -3
- funboost/consumers/rocketmq_consumer.py +2 -2
- funboost/consumers/sqlachemy_consumer.py +1 -1
- funboost/consumers/tcp_consumer.py +2 -2
- funboost/consumers/txt_file_consumer.py +2 -2
- funboost/consumers/udp_consumer.py +2 -2
- funboost/consumers/zeromq_consumer.py +1 -2
- funboost/core/booster.py +17 -2
- funboost/core/cli/discovery_boosters.py +2 -2
- funboost/core/funboost_time.py +26 -9
- funboost/core/helper_funs.py +16 -2
- funboost/core/lazy_impoter.py +30 -37
- funboost/core/loggers.py +3 -3
- funboost/core/muliti_process_enhance.py +3 -3
- funboost/funboost_config_deafult.py +1 -1
- funboost/utils/decorators.py +14 -0
- funboost/utils/paramiko_util.py +1 -1
- {funboost-44.2.dist-info → funboost-44.4.dist-info}/METADATA +9 -3
- {funboost-44.2.dist-info → funboost-44.4.dist-info}/RECORD +51 -51
- {funboost-44.2.dist-info → funboost-44.4.dist-info}/LICENSE +0 -0
- {funboost-44.2.dist-info → funboost-44.4.dist-info}/WHEEL +0 -0
- {funboost-44.2.dist-info → funboost-44.4.dist-info}/entry_points.txt +0 -0
- {funboost-44.2.dist-info → funboost-44.4.dist-info}/top_level.txt +0 -0
|
@@ -31,9 +31,9 @@ class UDPConsumer(AbstractConsumer, ):
|
|
|
31
31
|
while True:
|
|
32
32
|
data, client_addr = server.recvfrom(self.BUFSIZE)
|
|
33
33
|
# print('server收到的数据', data)
|
|
34
|
-
self._print_message_get_from_broker(f'udp {ip_port}', data.decode())
|
|
34
|
+
# self._print_message_get_from_broker(f'udp {ip_port}', data.decode())
|
|
35
35
|
server.sendto('has_recived'.encode(), client_addr)
|
|
36
|
-
kw = {'body':
|
|
36
|
+
kw = {'body': data}
|
|
37
37
|
self._submit_task(kw)
|
|
38
38
|
|
|
39
39
|
def _confirm_consume(self, kw):
|
|
@@ -96,8 +96,7 @@ class ZeroMqConsumer(AbstractConsumer):
|
|
|
96
96
|
while True:
|
|
97
97
|
message = zsocket.recv()
|
|
98
98
|
# self.logger.debug(f""" 从 zeromq 取出的消息是 {message}""")
|
|
99
|
-
self.
|
|
100
|
-
self._submit_task({'body': json.loads(message)})
|
|
99
|
+
self._submit_task({'body': message})
|
|
101
100
|
zsocket.send('recv ok'.encode())
|
|
102
101
|
|
|
103
102
|
def _confirm_consume(self, kw):
|
funboost/core/booster.py
CHANGED
|
@@ -4,6 +4,8 @@ import os
|
|
|
4
4
|
import types
|
|
5
5
|
import typing
|
|
6
6
|
|
|
7
|
+
from funboost.concurrent_pool import FlexibleThreadPool
|
|
8
|
+
from funboost.concurrent_pool.async_helper import simple_run_in_executor
|
|
7
9
|
from funboost.utils.ctrl_c_end import ctrl_c_recv
|
|
8
10
|
from funboost.core.loggers import flogger, develop_logger, logger_prompt
|
|
9
11
|
|
|
@@ -15,8 +17,8 @@ from funboost.core.func_params_model import BoosterParams, FunctionResultStatusP
|
|
|
15
17
|
from funboost.factories.consumer_factory import get_consumer
|
|
16
18
|
from collections import defaultdict
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
|
|
21
|
+
from funboost.core.msg_result_getter import AsyncResult, AioAsyncResult
|
|
20
22
|
|
|
21
23
|
|
|
22
24
|
class Booster:
|
|
@@ -123,6 +125,19 @@ class Booster:
|
|
|
123
125
|
consumer = BoostersManager.get_or_create_booster_by_queue_name(self.queue_name).consumer
|
|
124
126
|
return consumer.publisher_of_same_queue.publish(msg=msg, task_id=task_id, priority_control_config=priority_control_config)
|
|
125
127
|
|
|
128
|
+
async def aio_push(self, *func_args, **func_kwargs) -> AioAsyncResult:
|
|
129
|
+
"""asyncio 生态下发布消息,因为同步push只需要消耗不到1毫秒,所以基本上大概可以直接在asyncio异步生态中直接调用同步的push方法,
|
|
130
|
+
但为了更好的防止网络波动(例如发布消息到外网的消息队列耗时达到10毫秒),可以使用aio_push"""
|
|
131
|
+
async_result = await simple_run_in_executor(self.push, *func_args, **func_kwargs)
|
|
132
|
+
return AioAsyncResult(async_result.task_id, )
|
|
133
|
+
|
|
134
|
+
async def aio_publish(self, msg: typing.Union[str, dict], task_id=None,
|
|
135
|
+
priority_control_config: PriorityConsumingControlConfig = None) -> AioAsyncResult:
|
|
136
|
+
"""asyncio 生态下发布消息,因为同步push只需要消耗不到1毫秒,所以基本上大概可以直接在asyncio异步生态中直接调用同步的push方法,
|
|
137
|
+
但为了更好的防止网络波动(例如发布消息到外网的消息队列耗时达到10毫秒),可以使用aio_push"""
|
|
138
|
+
async_result = await simple_run_in_executor(self.publish,msg,task_id,priority_control_config)
|
|
139
|
+
return AioAsyncResult(async_result.task_id, )
|
|
140
|
+
|
|
126
141
|
# noinspection PyMethodMayBeStatic
|
|
127
142
|
def multi_process_consume(self, process_num=1):
|
|
128
143
|
"""超高速多进程消费"""
|
|
@@ -7,7 +7,7 @@ import importlib.util
|
|
|
7
7
|
# import nb_log
|
|
8
8
|
from funboost.core.loggers import FunboostFileLoggerMixin
|
|
9
9
|
from funboost.utils.decorators import flyweight
|
|
10
|
-
from funboost.core.lazy_impoter import
|
|
10
|
+
from funboost.core.lazy_impoter import funboost_lazy_impoter
|
|
11
11
|
|
|
12
12
|
@flyweight
|
|
13
13
|
class BoosterDiscovery(FunboostFileLoggerMixin):
|
|
@@ -68,7 +68,7 @@ class BoosterDiscovery(FunboostFileLoggerMixin):
|
|
|
68
68
|
spec = importlib.util.spec_from_file_location(module_name, file_path)
|
|
69
69
|
module = importlib.util.module_from_spec(spec)
|
|
70
70
|
spec.loader.exec_module(module)
|
|
71
|
-
|
|
71
|
+
funboost_lazy_impoter.BoostersManager.show_all_boosters()
|
|
72
72
|
|
|
73
73
|
|
|
74
74
|
if __name__ == '__main__':
|
funboost/core/funboost_time.py
CHANGED
|
@@ -13,16 +13,33 @@ class FunboostTime(NbTime):
|
|
|
13
13
|
def get_time_zone_str(self,time_zone: typing.Union[str, datetime.tzinfo,None] = None):
|
|
14
14
|
return time_zone or self.default_time_zone or FunboostCommonConfig.TIMEZONE or self.get_localzone_name()
|
|
15
15
|
|
|
16
|
+
@staticmethod
|
|
17
|
+
def _get_tow_digist(num:int)->str:
|
|
18
|
+
if len(str(num)) ==1:
|
|
19
|
+
return f'0{num}'
|
|
20
|
+
return str(num)
|
|
21
|
+
|
|
22
|
+
def get_str(self, formatter=None):
|
|
23
|
+
return self.datetime_obj.strftime(formatter or self.datetime_formatter)
|
|
24
|
+
|
|
25
|
+
def get_str_fast(self):
|
|
26
|
+
t_str = f'{self.datetime_obj.year}-{self._get_tow_digist(self.datetime_obj.month)}-{self._get_tow_digist(self.datetime_obj.day)} {self._get_tow_digist(self.datetime_obj.hour)}:{self._get_tow_digist(self.datetime_obj.minute)}:{self._get_tow_digist(self.datetime_obj.second)}'
|
|
27
|
+
return t_str
|
|
16
28
|
|
|
17
29
|
|
|
18
30
|
if __name__ == '__main__':
|
|
19
|
-
print(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
#
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
datetime.datetime.now(tz=
|
|
31
|
+
print(FunboostTime().get_str())
|
|
32
|
+
tz=pytz.timezone(FunboostCommonConfig.TIMEZONE)
|
|
33
|
+
for i in range(1000000):
|
|
34
|
+
pass
|
|
35
|
+
# FunboostTime()#.get_str_fast()
|
|
36
|
+
|
|
37
|
+
# datetime.datetime.now().strftime(NbTime.FORMATTER_DATETIME_NO_ZONE)
|
|
38
|
+
tz = pytz.timezone(FunboostCommonConfig.TIMEZONE)
|
|
39
|
+
datetime.datetime.now(tz=tz)
|
|
40
|
+
# datetime.datetime.now(tz=pytz.timezone(FunboostCommonConfig.TIMEZONE))#.strftime(NbTime.FORMATTER_DATETIME_NO_ZONE)
|
|
41
|
+
# datetime.datetime.now(tz=pytz.timezone(FunboostCommonConfig.TIMEZONE)).timestamp()
|
|
42
|
+
|
|
43
|
+
# time.strftime(NbTime.FORMATTER_DATETIME_NO_ZONE)
|
|
44
|
+
# time.time()
|
|
28
45
|
print(NbTime())
|
funboost/core/helper_funs.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import copy
|
|
2
|
+
import pytz
|
|
2
3
|
import time
|
|
3
4
|
import uuid
|
|
4
|
-
|
|
5
|
+
import datetime
|
|
5
6
|
from funboost.core.funboost_time import FunboostTime
|
|
6
7
|
|
|
7
8
|
|
|
@@ -46,7 +47,7 @@ class MsgGenerater:
|
|
|
46
47
|
|
|
47
48
|
@staticmethod
|
|
48
49
|
def generate_publish_time() -> float:
|
|
49
|
-
return round(
|
|
50
|
+
return round(time.time(),4)
|
|
50
51
|
|
|
51
52
|
@staticmethod
|
|
52
53
|
def generate_publish_time_format() -> str:
|
|
@@ -59,3 +60,16 @@ class MsgGenerater:
|
|
|
59
60
|
return extra_params
|
|
60
61
|
|
|
61
62
|
|
|
63
|
+
|
|
64
|
+
if __name__ == '__main__':
|
|
65
|
+
|
|
66
|
+
from funboost import FunboostCommonConfig
|
|
67
|
+
|
|
68
|
+
print(FunboostTime())
|
|
69
|
+
for i in range(1000000):
|
|
70
|
+
# time.time()
|
|
71
|
+
# MsgGenerater.generate_publish_time_format()
|
|
72
|
+
|
|
73
|
+
datetime.datetime.now(tz=pytz.timezone(FunboostCommonConfig.TIMEZONE)).strftime(FunboostTime.FORMATTER_DATETIME_NO_ZONE)
|
|
74
|
+
|
|
75
|
+
print(FunboostTime())
|
funboost/core/lazy_impoter.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import abc
|
|
2
2
|
|
|
3
|
-
from funboost.utils.decorators import cached_method_result, singleton, SingletonBaseNew, SingletonBaseCustomInit
|
|
3
|
+
from funboost.utils.decorators import cached_method_result, singleton, SingletonBaseNew, SingletonBaseCustomInit, singleton_no_lock
|
|
4
4
|
|
|
5
5
|
"""
|
|
6
6
|
延迟导入
|
|
@@ -8,7 +8,7 @@ from funboost.utils.decorators import cached_method_result, singleton, Singleton
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
class
|
|
11
|
+
class FunboostLazyImpoter(SingletonBaseNew):
|
|
12
12
|
"""
|
|
13
13
|
延迟导入,避免需要互相导入.
|
|
14
14
|
"""
|
|
@@ -26,7 +26,7 @@ class LazyImpoter(SingletonBaseNew):
|
|
|
26
26
|
# return get_current_taskid
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
funboost_lazy_impoter = FunboostLazyImpoter()
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
# noinspection SpellCheckingInspection
|
|
@@ -40,34 +40,19 @@ class GeventImporter:
|
|
|
40
40
|
from gevent.queue import JoinableQueue
|
|
41
41
|
"""
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
@cached_method_result
|
|
45
|
-
def gevent(self):
|
|
43
|
+
def __init__(self):
|
|
46
44
|
import gevent
|
|
47
45
|
print('导入gevent')
|
|
48
|
-
return gevent
|
|
49
|
-
|
|
50
|
-
@property
|
|
51
|
-
@cached_method_result
|
|
52
|
-
def gevent_pool(self):
|
|
53
46
|
from gevent import pool as gevent_pool
|
|
54
|
-
return gevent_pool
|
|
55
|
-
|
|
56
|
-
@property
|
|
57
|
-
@cached_method_result
|
|
58
|
-
def monkey(self):
|
|
59
47
|
from gevent import monkey
|
|
60
|
-
print('导入gevent')
|
|
61
|
-
return monkey
|
|
62
|
-
|
|
63
|
-
@property
|
|
64
|
-
@cached_method_result
|
|
65
|
-
def JoinableQueue(self):
|
|
66
48
|
from gevent.queue import JoinableQueue
|
|
67
|
-
|
|
49
|
+
self.gevent = gevent
|
|
50
|
+
self.gevent_pool = gevent_pool
|
|
51
|
+
self.monkey = monkey
|
|
52
|
+
self.JoinableQueue = JoinableQueue
|
|
68
53
|
|
|
69
54
|
|
|
70
|
-
@
|
|
55
|
+
@singleton_no_lock
|
|
71
56
|
class EventletImporter:
|
|
72
57
|
"""
|
|
73
58
|
避免提前导入
|
|
@@ -83,7 +68,7 @@ class EventletImporter:
|
|
|
83
68
|
self.Timeout = Timeout
|
|
84
69
|
|
|
85
70
|
|
|
86
|
-
@
|
|
71
|
+
@singleton_no_lock
|
|
87
72
|
class PeeweeImporter:
|
|
88
73
|
def __init__(self):
|
|
89
74
|
"""pip install peewee == 3.17"""
|
|
@@ -99,7 +84,7 @@ class PeeweeImporter:
|
|
|
99
84
|
self.dict_to_model = dict_to_model
|
|
100
85
|
|
|
101
86
|
|
|
102
|
-
@
|
|
87
|
+
@singleton_no_lock
|
|
103
88
|
class AioHttpImporter:
|
|
104
89
|
|
|
105
90
|
def __init__(self):
|
|
@@ -110,7 +95,7 @@ class AioHttpImporter:
|
|
|
110
95
|
self.Request = Request
|
|
111
96
|
|
|
112
97
|
|
|
113
|
-
@
|
|
98
|
+
@singleton_no_lock
|
|
114
99
|
class NatsImporter:
|
|
115
100
|
def __init__(self):
|
|
116
101
|
"""pip install nats-python """
|
|
@@ -118,7 +103,8 @@ class NatsImporter:
|
|
|
118
103
|
self.NATSClient = NATSClient
|
|
119
104
|
self.NATSMessage = NATSMessage
|
|
120
105
|
|
|
121
|
-
|
|
106
|
+
|
|
107
|
+
@singleton_no_lock
|
|
122
108
|
class GnsqImporter:
|
|
123
109
|
def __init__(self):
|
|
124
110
|
"""pip install gnsq==1.0.1"""
|
|
@@ -131,7 +117,8 @@ class GnsqImporter:
|
|
|
131
117
|
self.NsqdHTTPClient = NsqdHTTPClient
|
|
132
118
|
self.NSQHttpError = NSQHttpError
|
|
133
119
|
|
|
134
|
-
|
|
120
|
+
|
|
121
|
+
@singleton_no_lock
|
|
135
122
|
class ElasticsearchImporter:
|
|
136
123
|
def __init__(self):
|
|
137
124
|
"""pip install elasticsearch """
|
|
@@ -139,28 +126,31 @@ class ElasticsearchImporter:
|
|
|
139
126
|
self.helpers = helpers
|
|
140
127
|
|
|
141
128
|
|
|
142
|
-
@
|
|
129
|
+
@singleton_no_lock
|
|
143
130
|
class PsutilImporter:
|
|
144
131
|
def __init__(self):
|
|
145
132
|
"""pip install psutil"""
|
|
146
133
|
import psutil
|
|
147
134
|
self.psutil = psutil
|
|
148
135
|
|
|
149
|
-
|
|
136
|
+
|
|
137
|
+
@singleton_no_lock
|
|
150
138
|
class PahoMqttImporter:
|
|
151
139
|
def __init__(self):
|
|
152
140
|
"""pip install paho-mqtt"""
|
|
153
141
|
import paho.mqtt.client as mqtt
|
|
154
142
|
self.mqtt = mqtt
|
|
155
143
|
|
|
156
|
-
|
|
144
|
+
|
|
145
|
+
@singleton_no_lock
|
|
157
146
|
class ZmqImporter:
|
|
158
147
|
def __init__(self):
|
|
159
148
|
"""pip install zmq pyzmq"""
|
|
160
149
|
import zmq
|
|
161
150
|
self.zmq = zmq
|
|
162
151
|
|
|
163
|
-
|
|
152
|
+
|
|
153
|
+
@singleton_no_lock
|
|
164
154
|
class KafkaPythonImporter:
|
|
165
155
|
def __init__(self):
|
|
166
156
|
"""pip install kafka-python==2.0.2"""
|
|
@@ -177,7 +167,10 @@ class KafkaPythonImporter:
|
|
|
177
167
|
|
|
178
168
|
|
|
179
169
|
if __name__ == '__main__':
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
170
|
+
print()
|
|
171
|
+
for i in range(1000000):
|
|
172
|
+
# funboost_lazy_impoter.BoostersManager
|
|
173
|
+
# EventletImporter().greenpool
|
|
174
|
+
# GeventImporter().JoinableQueue
|
|
175
|
+
ZmqImporter().zmq
|
|
176
|
+
print()
|
funboost/core/loggers.py
CHANGED
|
@@ -40,11 +40,11 @@ class FunboostMetaTypeFileLogger(type):
|
|
|
40
40
|
cls.logger: logging.Logger = get_funboost_file_logger(name)
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
nb_log.LogManager('_KeepAliveTimeThread').preset_log_level(_try_get_user_funboost_common_config('KEEPALIVETIMETHREAD_LOG_LEVEL') or logging.DEBUG)
|
|
44
44
|
|
|
45
|
+
flogger = get_funboost_file_logger('funboost', )
|
|
45
46
|
# print(_try_get_user_funboost_common_config('FUNBOOST_PROMPT_LOG_LEVEL'))
|
|
46
|
-
logger_prompt = get_funboost_file_logger('funboost.prompt', log_level_int=_try_get_user_funboost_common_config('FUNBOOST_PROMPT_LOG_LEVEL') or logging.DEBUG)
|
|
47
|
-
nb_log.LogManager('_KeepAliveTimeThread').preset_log_level(_try_get_user_funboost_common_config('KEEPALIVETIMETHREAD_LOG_LEVEL') or logging.DEBUG)
|
|
47
|
+
logger_prompt = get_funboost_file_logger('funboost.prompt', log_level_int=_try_get_user_funboost_common_config('FUNBOOST_PROMPT_LOG_LEVEL') or logging.DEBUG)
|
|
48
48
|
|
|
49
49
|
# 开发时候的调试日志,比print方便通过级别一键屏蔽。
|
|
50
50
|
develop_logger = get_logger('funboost_develop', log_level_int=logging.WARNING, log_filename='funboost_develop.log')
|
|
@@ -7,11 +7,11 @@ from concurrent.futures import ProcessPoolExecutor
|
|
|
7
7
|
from funboost.core.booster import Booster
|
|
8
8
|
from funboost.core.helper_funs import run_forever
|
|
9
9
|
from funboost.core.loggers import flogger
|
|
10
|
-
from funboost.core.lazy_impoter import
|
|
10
|
+
from funboost.core.lazy_impoter import funboost_lazy_impoter
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def _run_consumer_in_new_process(queue_name, ):
|
|
14
|
-
booster_current_pid =
|
|
14
|
+
booster_current_pid = funboost_lazy_impoter.BoostersManager.get_or_create_booster_by_queue_name(queue_name)
|
|
15
15
|
# booster_current_pid = boost(**boost_params)(consuming_function)
|
|
16
16
|
booster_current_pid.consume()
|
|
17
17
|
# ConsumersManager.join_all_consumer_shedual_task_thread()
|
|
@@ -49,7 +49,7 @@ def run_consumer_with_multi_process(booster: Booster, process_num=1):
|
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
def _multi_process_pub_params_list_in_new_process(queue_name, msgs: List[dict]):
|
|
52
|
-
booster_current_pid =
|
|
52
|
+
booster_current_pid = funboost_lazy_impoter.BoostersManager.get_or_create_booster_by_queue_name(queue_name)
|
|
53
53
|
publisher = booster_current_pid.publisher
|
|
54
54
|
publisher.set_log_level(20) # 超高速发布,如果打印详细debug日志会卡死屏幕和严重降低代码速度。
|
|
55
55
|
for msg in msgs:
|
|
@@ -87,7 +87,7 @@ class BrokerConnConfig(DataClassBase):
|
|
|
87
87
|
KOMBU_URL = 'redis://127.0.0.1:6379/9' # 这个就是celery依赖包kombu使用的消息队列格式,所以funboost支持一切celery支持的消息队列种类。
|
|
88
88
|
# KOMBU_URL = 'sqla+sqlite:////dssf_kombu_sqlite.sqlite' # 4个//// 代表磁盘根目录下生成一个文件。推荐绝对路径。3个///是相对路径。
|
|
89
89
|
|
|
90
|
-
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/12' # 使用celery作为中间件。funboost新增支持celery
|
|
90
|
+
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/12' # 使用celery作为中间件。funboost新增支持celery框架来运行函数,url内容就是celery的broker形式.
|
|
91
91
|
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/13' # celery结果存放,可以为None
|
|
92
92
|
|
|
93
93
|
DRAMATIQ_URL = RABBITMQ_URL
|
funboost/utils/decorators.py
CHANGED
|
@@ -164,6 +164,20 @@ def singleton(cls:ClSX) -> ClSX:
|
|
|
164
164
|
|
|
165
165
|
return _singleton
|
|
166
166
|
|
|
167
|
+
def singleton_no_lock(cls:ClSX) -> ClSX:
|
|
168
|
+
"""
|
|
169
|
+
单例模式装饰器,新加入线程锁,更牢固的单例模式,主要解决多线程如100线程同时实例化情况下可能会出现三例四例的情况,实测。
|
|
170
|
+
"""
|
|
171
|
+
_instance = {}
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
@wraps(cls)
|
|
175
|
+
def _singleton(*args, **kwargs):
|
|
176
|
+
if cls not in _instance:
|
|
177
|
+
_instance[cls] = cls(*args, **kwargs)
|
|
178
|
+
return _instance[cls]
|
|
179
|
+
|
|
180
|
+
return _singleton
|
|
167
181
|
|
|
168
182
|
class SingletonMeta(type):
|
|
169
183
|
_instances = {}
|
funboost/utils/paramiko_util.py
CHANGED
|
@@ -50,7 +50,7 @@ class ParamikoFolderUploader(LoggerMixin, LoggerLevelSetterMixin):
|
|
|
50
50
|
|
|
51
51
|
t = paramiko.Transport((host, port))
|
|
52
52
|
if pkey_file_path is not None and os.path.exists(pkey_file_path):
|
|
53
|
-
pkey = paramiko.RSAKey.from_private_key_file(
|
|
53
|
+
pkey = paramiko.RSAKey.from_private_key_file(pkey_file_path)
|
|
54
54
|
t.connect(username=user, pkey=pkey)
|
|
55
55
|
else:
|
|
56
56
|
t.connect(username=user, password=password)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: funboost
|
|
3
|
-
Version: 44.
|
|
3
|
+
Version: 44.4
|
|
4
4
|
Summary: pip install funboost,python全功能分布式函数调度框架,。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
|
|
5
5
|
Home-page: https://github.com/ydf0509/funboost
|
|
6
6
|
Author: bfzs
|
|
@@ -76,6 +76,11 @@ Requires-Dist: rocketmq ; extra == 'all'
|
|
|
76
76
|
Requires-Dist: zmq ; extra == 'all'
|
|
77
77
|
Requires-Dist: pyzmq ; extra == 'all'
|
|
78
78
|
Requires-Dist: kafka-python (==2.0.2) ; extra == 'all'
|
|
79
|
+
Requires-Dist: flask ; extra == 'all'
|
|
80
|
+
Requires-Dist: flask-bootstrap ; extra == 'all'
|
|
81
|
+
Requires-Dist: flask-wtf ; extra == 'all'
|
|
82
|
+
Requires-Dist: wtforms ; extra == 'all'
|
|
83
|
+
Requires-Dist: flask-login ; extra == 'all'
|
|
79
84
|
Requires-Dist: pulsar-client (==3.1.0) ; (python_version >= "3.7") and extra == 'all'
|
|
80
85
|
Provides-Extra: extra_brokers
|
|
81
86
|
Requires-Dist: confluent-kafka (==1.7.0) ; extra == 'extra_brokers'
|
|
@@ -133,7 +138,7 @@ pip install funboost ,python全功能分布式函数调度框架,。 用法例
|
|
|
133
138
|
python函数加速器,框架包罗万象,一统编程思维,兼容50% python编程业务场景,适用范围广。
|
|
134
139
|
只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 方便 快速 强大。
|
|
135
140
|
python万能分布式函数调度框架,支持5种并发模式,30+种消息队列中间件(或任务队列框架),
|
|
136
|
-
|
|
141
|
+
30种任务控制功能。给任意python函数赋能。
|
|
137
142
|
用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
|
|
138
143
|
框架只需要学习@boost这一个装饰器的入参就可以,所有用法几乎和1.3例子一摸一样,非常简化简单。
|
|
139
144
|
</pre>
|
|
@@ -215,7 +220,7 @@ pip install funboost --upgrade
|
|
|
215
220
|
|
|
216
221
|
## 1.2 框架功能介绍
|
|
217
222
|
|
|
218
|
-
分布式函数调度框架,支持5种并发模式,20+种消息中间件,
|
|
223
|
+
分布式函数调度框架,支持5种并发模式,20+种消息中间件,30种任务控制功能。<br>
|
|
219
224
|
用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
|
|
220
225
|
|
|
221
226
|
有了这个框架,用户再也无需亲自手写操作进程、线程、协程的并发的代码了。
|
|
@@ -505,6 +510,7 @@ if __name__ == "__main__":
|
|
|
505
510
|
|
|
506
511
|
<a href="https://imgse.com/i/pkFkCUe"><img src="https://s21.ax1x.com/2024/04/29/pkFkCUe.png" alt="pkFkCUe.png" border="0" /></a>
|
|
507
512
|
|
|
513
|
+
<a href="https://imgse.com/i/pkE6IYR"><img src="https://s21.ax1x.com/2024/05/07/pkE6IYR.png" alt="pkE6IYR.png" border="0" /></a>
|
|
508
514
|
|
|
509
515
|
## 1.4 python分布式函数执行为什么重要?
|
|
510
516
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
funboost/__init__.py,sha256=
|
|
1
|
+
funboost/__init__.py,sha256=5ElyfATJ1YHMtE87AY-GMr6NHoojJSfe01SuYgSNu3g,3834
|
|
2
2
|
funboost/__init__old.py,sha256=07A1MLsxLtuRQQOIfDyphddOwNBrGe34enoHWAnjV14,20379
|
|
3
3
|
funboost/__main__.py,sha256=-6Nogi666Y0LN8fVm3JmHGTOk8xEGWvotW_GDbSaZME,1065
|
|
4
4
|
funboost/constant.py,sha256=Yxt3WJt9D8ybcrgiojOy0qjnq5mffwTnTJplerGL0Oo,7188
|
|
5
|
-
funboost/funboost_config_deafult.py,sha256=
|
|
5
|
+
funboost/funboost_config_deafult.py,sha256=K-kCFGEjD107wHWFspNrIWsPNSVteP2Xww1yRbXd-Wk,6651
|
|
6
6
|
funboost/set_frame_config.py,sha256=fnc9yIWTxVnqFrUQrXTGPWBzHgPNebsf-xnzYpktY9U,14339
|
|
7
7
|
funboost/assist/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
8
|
funboost/assist/celery_helper.py,sha256=EOxsl-y65JPwHrmL0LTGAj1nKLbS0qyRbuXcJ0xo9wc,5721
|
|
@@ -13,7 +13,7 @@ funboost/assist/rq_helper.py,sha256=HYvQ7VqIMx7dAVZZhtqQmGReCJavEuc1BQPYvfm1EvY,
|
|
|
13
13
|
funboost/assist/rq_windows_worker.py,sha256=jQlGmU0FWPVoKVP8cyuwTuAca9VfSd75F5Qw_hR04y0,4831
|
|
14
14
|
funboost/beggar_version_implementation/beggar_redis_consumer.py,sha256=x5cH6Vc3_UooY2oPeC9MlpMewrGd9qXCx6gEWi1fGa0,3941
|
|
15
15
|
funboost/concurrent_pool/__init__.py,sha256=C27xYXj7c1NGuVeG7K2LxKH7JKnGwfPfITyon6xFaoE,803
|
|
16
|
-
funboost/concurrent_pool/async_helper.py,sha256=
|
|
16
|
+
funboost/concurrent_pool/async_helper.py,sha256=bK4SyTu_WpgxCvai2AaiI7EKQ-COiDbqu0WPnbaJ1jM,3421
|
|
17
17
|
funboost/concurrent_pool/async_pool_executor.py,sha256=n2T4WgUitloFgHfRXTaD5Ro29WkR8qEw1ftEIub03Ug,7515
|
|
18
18
|
funboost/concurrent_pool/base_pool_type.py,sha256=h3xcadufMAf49CoNe5VkUyIxlniMeNtDjadqB5IsiKA,194
|
|
19
19
|
funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py,sha256=pWqpKAP0Z0cuHdSHJ5ti6EpNndnIoYkPE6IOl4BvbJw,4775
|
|
@@ -33,46 +33,46 @@ funboost/concurrent_pool/backup/async_pool_executor0223.py,sha256=RVUZiylUvpTm6U
|
|
|
33
33
|
funboost/concurrent_pool/backup/async_pool_executor_back.py,sha256=KL6zEQaa1KkZOlAO85mCC1gwLm-YC5Ghn21IUom0UKM,9598
|
|
34
34
|
funboost/concurrent_pool/backup/async_pool_executor_janus.py,sha256=OHMWJ9l3EYTpPpcrPrGGKd4K0tmQ2PN8HiX0Dta0EOo,5728
|
|
35
35
|
funboost/consumers/__init__.py,sha256=ZXY_6Kut1VYNQiF5aWEgIWobsW1ht9YUP0TdRZRWFqI,126
|
|
36
|
-
funboost/consumers/base_consumer.py,sha256=
|
|
36
|
+
funboost/consumers/base_consumer.py,sha256=lKJQwQJfonZDrV8zcglGOHEBjcACdMnq8kQhIMxY2lw,76558
|
|
37
37
|
funboost/consumers/celery_consumer.py,sha256=9gtz7nlZkmv3ErmaseT0_Q__ltSPx-fOcwi-TMPoaLA,9220
|
|
38
38
|
funboost/consumers/confirm_mixin.py,sha256=eY6fNwx51Hn4bQSYRjyTRwOqfCGsikVnd2Ga_Ep31N4,6062
|
|
39
39
|
funboost/consumers/dramatiq_consumer.py,sha256=ozmeAfeF0U-YNYHK4suQB0N264h5AZdfMH0O45Mh-8A,2229
|
|
40
|
-
funboost/consumers/http_consumer.py,sha256=
|
|
41
|
-
funboost/consumers/http_consumer000.py,sha256=
|
|
42
|
-
funboost/consumers/httpsqs_consumer.py,sha256=
|
|
40
|
+
funboost/consumers/http_consumer.py,sha256=2MVqEzHW9qIKWvgIQS7VncGfvpmWhQ3BWWjfyHWC-as,2179
|
|
41
|
+
funboost/consumers/http_consumer000.py,sha256=PiiSLSQB-hHgS1vAn8DoHD2siC3zO6_kKjVW0g6AFIc,4379
|
|
42
|
+
funboost/consumers/httpsqs_consumer.py,sha256=kaqOcrKMLrSR27XqeiheRDmpF1KDVDghgbHcefTjqt8,1171
|
|
43
43
|
funboost/consumers/huey_consumer.py,sha256=cW10ZPxdZQzUuJwdqQpJIRPTj2vCbZS0uXFJ7L8bpa4,1843
|
|
44
|
-
funboost/consumers/kafka_consumer.py,sha256=
|
|
45
|
-
funboost/consumers/kafka_consumer_manually_commit.py,sha256=
|
|
46
|
-
funboost/consumers/kombu_consumer.py,sha256=
|
|
47
|
-
funboost/consumers/local_python_queue_consumer.py,sha256=
|
|
48
|
-
funboost/consumers/memory_deque_consumer.py,sha256=
|
|
49
|
-
funboost/consumers/mongomq_consumer.py,sha256=
|
|
50
|
-
funboost/consumers/mqtt_consumer.py,sha256=
|
|
44
|
+
funboost/consumers/kafka_consumer.py,sha256=OAq6fclhDBufsWTowAikGBYjptc28SIE-EDzFEz9J-I,4324
|
|
45
|
+
funboost/consumers/kafka_consumer_manually_commit.py,sha256=kkHyTf4EQFEEoyiZ-pZQBR-g3M1rkFYnfKFXoeODCIE,9620
|
|
46
|
+
funboost/consumers/kombu_consumer.py,sha256=hj2J-1r5hBbcTNXIpU6qe1MwYPD-8gEKlDTSRV3B5Js,10208
|
|
47
|
+
funboost/consumers/local_python_queue_consumer.py,sha256=HyUFZXY6phF6eaL1qd5z7Kof3LZ0J6EO0zllBS-skqA,1220
|
|
48
|
+
funboost/consumers/memory_deque_consumer.py,sha256=tTwOkrB9GdySOQstVLnU4hnBnap6rafCeoXhmV0TI5c,1110
|
|
49
|
+
funboost/consumers/mongomq_consumer.py,sha256=e1Cupe-Cb2LUuJlQhER6NecrvK7FyzKKZ2HxyfOI-OY,1119
|
|
50
|
+
funboost/consumers/mqtt_consumer.py,sha256=iLWKxe0CjKHUYrE6YMWNJHto0tD3siUAvZl9ssNsz_s,2297
|
|
51
51
|
funboost/consumers/nameko_consumer.py,sha256=Qhl2FmrIjzjXLkIdMLQdhZ8GmrhiuoEss7cwGHCFT7c,2213
|
|
52
|
-
funboost/consumers/nats_consumer.py,sha256=
|
|
53
|
-
funboost/consumers/nsq_consumer.py,sha256=
|
|
54
|
-
funboost/consumers/peewee_conusmer.py,sha256=
|
|
55
|
-
funboost/consumers/persist_queue_consumer.py,sha256=
|
|
56
|
-
funboost/consumers/pulsar_consumer.py,sha256=
|
|
57
|
-
funboost/consumers/rabbitmq_amqpstorm_consumer.py,sha256=
|
|
58
|
-
funboost/consumers/rabbitmq_pika_consumer.py,sha256=
|
|
59
|
-
funboost/consumers/rabbitmq_pika_consumerv0.py,sha256=
|
|
60
|
-
funboost/consumers/rabbitmq_rabbitpy_consumer.py,sha256=
|
|
61
|
-
funboost/consumers/redis_brpoplpush_consumer.py,sha256=
|
|
62
|
-
funboost/consumers/redis_consumer.py,sha256=
|
|
63
|
-
funboost/consumers/redis_consumer_ack_able.py,sha256=
|
|
64
|
-
funboost/consumers/redis_consumer_priority.py,sha256=
|
|
65
|
-
funboost/consumers/redis_consumer_simple.py,sha256=
|
|
52
|
+
funboost/consumers/nats_consumer.py,sha256=yv_8SC4zdw5UXBpYooFMXHaC-mNzws5IK0woxHWr1NM,1119
|
|
53
|
+
funboost/consumers/nsq_consumer.py,sha256=KcP4wT656LyvuwyQXnVp0B6DwYvnZ6z_Vyzt0KjHAQc,1518
|
|
54
|
+
funboost/consumers/peewee_conusmer.py,sha256=VqbSu9AdKO4_wgu0XhTWRO3VeWctecbbz2X_V04_kXw,1115
|
|
55
|
+
funboost/consumers/persist_queue_consumer.py,sha256=PUfelfW84YiqcsbcIAveWMC50rw2DScZ3u_aiaS0Kk8,1015
|
|
56
|
+
funboost/consumers/pulsar_consumer.py,sha256=eorN61kCvP3yg4fNAB3ZCfqpJJxPnAN6PJY48uiYX5Y,2385
|
|
57
|
+
funboost/consumers/rabbitmq_amqpstorm_consumer.py,sha256=r6pQP14c9-D1Bn2hc5hHoHqHOgWJaB2itiemEhz4iIM,2214
|
|
58
|
+
funboost/consumers/rabbitmq_pika_consumer.py,sha256=51IkRUSR0v2v7BUlA8oInx81VGeO5OaD2pk0UXHdY78,5408
|
|
59
|
+
funboost/consumers/rabbitmq_pika_consumerv0.py,sha256=rIQToBTBqGdjnzMhg0vyZMY87NtK_Uw8ggiTu39JQ_w,4777
|
|
60
|
+
funboost/consumers/rabbitmq_rabbitpy_consumer.py,sha256=xxINY037pmgF3_lJA-zhf9qUIUx6DdqC7tsUOQL3dL4,1330
|
|
61
|
+
funboost/consumers/redis_brpoplpush_consumer.py,sha256=HqjgjjEibq7D-5XFpJtyaPvtfXD5zbq9cjSHx4aM1gU,2952
|
|
62
|
+
funboost/consumers/redis_consumer.py,sha256=63QbUfEftr29XNG7989UgLWM9Adn01A5gPiBMMGQc0w,2559
|
|
63
|
+
funboost/consumers/redis_consumer_ack_able.py,sha256=e83pwbxYKdXfD-suUh_5uTQwomBB2-FU0xo_iRvLKFo,7221
|
|
64
|
+
funboost/consumers/redis_consumer_priority.py,sha256=C-ftnlGPPoB7YV3GvwLu9POVGDn_GKlBqO6NlsZ-hdY,5566
|
|
65
|
+
funboost/consumers/redis_consumer_simple.py,sha256=0iGaZpTOwbmbz3PkpUjy-PmsN1PmAFweA-LACv1TyZU,806
|
|
66
66
|
funboost/consumers/redis_filter.py,sha256=rKNFz8mxVo4n4o8v3MP4UqdPAtoK7msQ-1xRgzFfts0,7290
|
|
67
|
-
funboost/consumers/redis_pubsub_consumer.py,sha256=
|
|
68
|
-
funboost/consumers/redis_stream_consumer.py,sha256=
|
|
69
|
-
funboost/consumers/rocketmq_consumer.py,sha256=
|
|
67
|
+
funboost/consumers/redis_pubsub_consumer.py,sha256=8V8EqobKpEXzpsQx_H3A-JBKLsWOsE0n16g62tUMMYY,1122
|
|
68
|
+
funboost/consumers/redis_stream_consumer.py,sha256=xRfrtpCHxBpPHSto1mu3URN7IivX3klFgQM8IxC5tqs,6396
|
|
69
|
+
funboost/consumers/rocketmq_consumer.py,sha256=23KLRz8iO9e_x7asrceRJYhwJFMruUgmKw7m3pHVkw0,1692
|
|
70
70
|
funboost/consumers/rq_consumer.py,sha256=JX84k6Jiv4pBiQMmnhdJ7s7Qz4ub5TWS4T7qTF-WdlM,876
|
|
71
|
-
funboost/consumers/sqlachemy_consumer.py,sha256=
|
|
72
|
-
funboost/consumers/tcp_consumer.py,sha256=
|
|
73
|
-
funboost/consumers/txt_file_consumer.py,sha256=
|
|
74
|
-
funboost/consumers/udp_consumer.py,sha256=
|
|
75
|
-
funboost/consumers/zeromq_consumer.py,sha256=
|
|
71
|
+
funboost/consumers/sqlachemy_consumer.py,sha256=PawUaNV7EZWBQVWXkGaXy1Z16hUgxU4BLDeUFR83ewM,1300
|
|
72
|
+
funboost/consumers/tcp_consumer.py,sha256=9uXzbkgEU-r4kH07v4ASxUSTe-JEo-EgJ1228pju4W4,2035
|
|
73
|
+
funboost/consumers/txt_file_consumer.py,sha256=Uelk6q8hYPudofJXMTaCmg_td7z7HAcZGdoqgRgolOs,1261
|
|
74
|
+
funboost/consumers/udp_consumer.py,sha256=l1ll7RL87KK-L1F_DLZccO2ghxFsZtbWUJVXAOCQUx8,1633
|
|
75
|
+
funboost/consumers/zeromq_consumer.py,sha256=2ZAdo01k7EVZN38Eb9CWCd2hepqLM9YHE1qVBxnCPok,4346
|
|
76
76
|
funboost/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
77
|
funboost/contrib/api_publish_msg.py,sha256=8khUiOjbiaTuNlOU4_FMBYYNLkwHssPw-vnlE0iixVk,2480
|
|
78
78
|
funboost/contrib/django_db_deco.py,sha256=RJaRUYdVqS10gWqM4Ncs0Lngox52SUaqIIn5GK5a8Uo,865
|
|
@@ -81,24 +81,24 @@ funboost/contrib/redis_consume_latest_msg_broker.py,sha256=ESortBZ2qu_4PBCa3e3Fe
|
|
|
81
81
|
funboost/contrib/save_result_status_to_sqldb.py,sha256=AxvD7nHs4sjr9U0kwEZzyPKrsGdU_JzEgzzhh_V1_4w,4071
|
|
82
82
|
funboost/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
83
|
funboost/core/active_cousumer_info_getter.py,sha256=09fEc-BTEIRfDDfHmOvKnMjLjtOyp4edLsUlAXUR_Qs,4966
|
|
84
|
-
funboost/core/booster.py,sha256=
|
|
84
|
+
funboost/core/booster.py,sha256=dEr3uFzGg3Tik3fvCm20WREIPpWO825Crj-DzBtby1w,17224
|
|
85
85
|
funboost/core/current_task.py,sha256=rAIQVLqYqtlHVRkjl17yki-mqvuMb640ssGmto4RSdA,4864
|
|
86
86
|
funboost/core/exceptions.py,sha256=pLF7BkRJAfDiWp2_xGZqencmwdPiSQI1NENbImExknY,1311
|
|
87
87
|
funboost/core/fabric_deploy_helper.py,sha256=foieeqlNySuU9axJzNF6TavPjIUSYBx9UO3syVKUiyY,9999
|
|
88
88
|
funboost/core/funboost_config_getter.py,sha256=TDccp5pQamkoJXkwyPwGsQGDJY8ej8ZT8L8RESSAD2w,382
|
|
89
|
-
funboost/core/funboost_time.py,sha256=
|
|
89
|
+
funboost/core/funboost_time.py,sha256=IbB4dFCpg3oGUe90ssAJ_x0eDPtAVfvsUr4esdoKaOk,1777
|
|
90
90
|
funboost/core/func_params_model.py,sha256=UWpPujyCj5xwsu6kqjSneDmekNTWkqt0AoLlEDl2RmA,19173
|
|
91
91
|
funboost/core/function_result_status_config.py,sha256=PyjqAQOiwsLt28sRtH-eYRjiI3edPFO4Nde0ILFRReE,1764
|
|
92
92
|
funboost/core/function_result_status_saver.py,sha256=UdokGSwU630t70AZnT9Ecj7GpYXORBDivlc9kadoI2E,9172
|
|
93
|
-
funboost/core/helper_funs.py,sha256=
|
|
93
|
+
funboost/core/helper_funs.py,sha256=1MZjedV6TGdaAjmj9q-ykgoTI_BtG9ZQm58PLOMVdDM,2362
|
|
94
94
|
funboost/core/kill_remote_task.py,sha256=MZ5vWLGt6SxyN76h5Lf_id9tyVUzjR-qXNyJwXaGlZY,8129
|
|
95
|
-
funboost/core/lazy_impoter.py,sha256=
|
|
96
|
-
funboost/core/loggers.py,sha256=
|
|
95
|
+
funboost/core/lazy_impoter.py,sha256=wH7u8nm6rLGtWmF643d5ga4CrJEmAhaSsDEBEeuiD4Q,4825
|
|
96
|
+
funboost/core/loggers.py,sha256=uy5mFLIUvKaVdJZLi6THyxqeuOmp9XEOKrH1Yci0zUM,2354
|
|
97
97
|
funboost/core/msg_result_getter.py,sha256=oZDuLDR5XQNzzvgDTsA7wroICToPwrkU9-OAaXXUQSk,8031
|
|
98
|
-
funboost/core/muliti_process_enhance.py,sha256=
|
|
98
|
+
funboost/core/muliti_process_enhance.py,sha256=tI3178inc5sqPh-jQc0XaTuUD1diIZyHuukBRk1Gp6Y,3595
|
|
99
99
|
funboost/core/task_id_logger.py,sha256=lR19HQcX6Pp8laURCD656xNpF_JP6nLB3zUKI69EWzE,864
|
|
100
100
|
funboost/core/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
101
|
-
funboost/core/cli/discovery_boosters.py,sha256=
|
|
101
|
+
funboost/core/cli/discovery_boosters.py,sha256=mbEyv0bUIGcmgkfXLI_Q1IK1QvVwKyro8XccuuMEA6o,3944
|
|
102
102
|
funboost/core/cli/funboost_cli_user_templ.py,sha256=XUpKLxRKtYfebPUM8wii64kB0HW8L7j9LnRpT0xCfQI,2243
|
|
103
103
|
funboost/core/cli/funboost_fire.py,sha256=OT0SNi9Zb0Tom2E0cWuArQs0obUowAA_rpCF7GdaKPs,5065
|
|
104
104
|
funboost/factories/__init__.py,sha256=s7kKKjR1HU5eMjPD6r5b-SXTVMo1zBp2JjOAtkyt5Yo,178
|
|
@@ -172,7 +172,7 @@ funboost/utils/block_exit.py,sha256=BnfxNYo3lnmhk686RAEoc4u3D4RU_iEMMMgu5L8gIuI,
|
|
|
172
172
|
funboost/utils/bulk_operation.py,sha256=B4FBxlz5f4oqlKDWqer7axn4gnDSfsYoMW2zSUCnGcQ,10101
|
|
173
173
|
funboost/utils/ctrl_c_end.py,sha256=FgT9An-qsUA5gW-V-UKWqOh5shC7C_uvTFn0fS7i8GI,439
|
|
174
174
|
funboost/utils/custom_pysnooper.py,sha256=7yXLKEMY_JjPRRt0Y0N-wV2CFhILlYNh40Y6uRBUaj8,5923
|
|
175
|
-
funboost/utils/decorators.py,sha256=
|
|
175
|
+
funboost/utils/decorators.py,sha256=MaoftkcBXLqRNX8KPik7K2jK5p6Brx2QfPitNaJQCm0,26541
|
|
176
176
|
funboost/utils/develop_log.py,sha256=Wsx0ongGjTit5xqgk1BztYlVEkC6d0-Y7GENXLedVqY,271
|
|
177
177
|
funboost/utils/expire_lock.py,sha256=AOkd1KlvZeIwQaz8ZoKxLpGxWgqQ4mfNHcFphh04o8Q,4732
|
|
178
178
|
funboost/utils/json_helper.py,sha256=HDdtLyZBGpWbUm7vmTypKXd8K-Hb-9BaxpdmRlKMYUI,1849
|
|
@@ -180,7 +180,7 @@ funboost/utils/mongo_util.py,sha256=g2AdsanKm2v9X-OaTCS6hx_0JvRw5WukXIttN3TD9sI,
|
|
|
180
180
|
funboost/utils/monkey_color_log.py,sha256=QChhQMTB6phZ2eBaPq-9tFZF1n7pWeJgmJPIB_ugkvs,7367
|
|
181
181
|
funboost/utils/monkey_patches.py,sha256=vGmtPuTwNLbS8T3gpufSC_cD8_Vnp85roZrCpJZUSE4,2890
|
|
182
182
|
funboost/utils/mqtt_util.py,sha256=BfCmyYwI-B8VL9499_IuYlJDCbv6ZhwyWThMf8dANOU,3199
|
|
183
|
-
funboost/utils/paramiko_util.py,sha256=
|
|
183
|
+
funboost/utils/paramiko_util.py,sha256=rHJm9Cp1YX24ew3jT5iR0qPqv-WJLd7VhRoMkHphY60,5244
|
|
184
184
|
funboost/utils/rabbitmq_factory.py,sha256=ifDCn2RxSGL4MccmktJc5FYQhAcboCgHBlEo3WGpq3g,2910
|
|
185
185
|
funboost/utils/redis_manager.py,sha256=iG3e9k3oedtKcGwDnjKA0hUFsk_MSlvVM2C3m3K97Y4,3657
|
|
186
186
|
funboost/utils/redis_manager_old.py,sha256=c3RBXN6dM3kjVBqkCdotpZuYmFs4d9emfp5iJgC61Us,5516
|
|
@@ -265,9 +265,9 @@ funboost/utils/pysnooper_ydf/utils.py,sha256=evSmGi_Oul7vSP47AJ0DLjFwoCYCfunJZ1m
|
|
|
265
265
|
funboost/utils/pysnooper_ydf/variables.py,sha256=QejRDESBA06KG9OH4sBT4J1M55eaU29EIHg8K_igaXo,3693
|
|
266
266
|
funboost/utils/times/__init__.py,sha256=Y4bQD3SIA_E7W2YvHq2Qdi0dGM4H2DxyFNdDOuFOq1w,2417
|
|
267
267
|
funboost/utils/times/version.py,sha256=11XfnZVVzOgIhXXdeN_mYfdXThfrsbQHpA0wCjz-hpg,17
|
|
268
|
-
funboost-44.
|
|
269
|
-
funboost-44.
|
|
270
|
-
funboost-44.
|
|
271
|
-
funboost-44.
|
|
272
|
-
funboost-44.
|
|
273
|
-
funboost-44.
|
|
268
|
+
funboost-44.4.dist-info/LICENSE,sha256=9EPP2ktG_lAPB8PjmWV-c9BiaJHc_FP6pPLcUrUwx0E,11562
|
|
269
|
+
funboost-44.4.dist-info/METADATA,sha256=YDADellqruEZqdFJLMy2TQMJLXQ-MO_LfjbtGBONgf0,31692
|
|
270
|
+
funboost-44.4.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
|
271
|
+
funboost-44.4.dist-info/entry_points.txt,sha256=BQMqRALuw-QT9x2d7puWaUHriXfy3wIzvfzF61AnSSI,97
|
|
272
|
+
funboost-44.4.dist-info/top_level.txt,sha256=K8WuKnS6MRcEWxP1NvbmCeujJq6TEfbsB150YROlRw0,9
|
|
273
|
+
funboost-44.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|