xtn-tools-pro 1.0.0.4.9__tar.gz → 1.0.0.5.1__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {xtn-tools-pro-1.0.0.4.9/xtn_tools_pro.egg-info → xtn-tools-pro-1.0.0.5.1}/PKG-INFO +1 -1
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/setup.py +1 -1
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/task_pro/go_fun.py +36 -8
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/utils/log.py +5 -5
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1/xtn_tools_pro.egg-info}/PKG-INFO +1 -1
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/LICENSE +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/README.md +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/setup.cfg +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/__init__.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/db/MongoDB.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/db/MysqlDB.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/db/RedisDB.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/db/__init__.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/proxy/XiaoXiangProxy.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/proxy/__init__.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/proxy/proxy.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/task_pro/__init__.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/tools.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/utils/__init__.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/utils/crypto.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/utils/file_utils.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/utils/helpers.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/utils/retry.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/utils/sql.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro/utils/time_utils.py +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro.egg-info/SOURCES.txt +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro.egg-info/dependency_links.txt +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro.egg-info/requires.txt +0 -0
- {xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro.egg-info/top_level.txt +0 -0
@@ -16,6 +16,7 @@ import threading
|
|
16
16
|
import multiprocessing
|
17
17
|
import concurrent.futures
|
18
18
|
from multiprocessing import Process
|
19
|
+
from xtn_tools_pro.utils.time_utils import get_time_now_timestamp
|
19
20
|
|
20
21
|
|
21
22
|
class GoFun:
|
@@ -78,37 +79,64 @@ class GoFun:
|
|
78
79
|
upload_queue = multiprocessing.Queue()
|
79
80
|
proxies_dict = manager.dict()
|
80
81
|
|
81
|
-
processes_list = []
|
82
82
|
processes_item_info = {
|
83
83
|
"_download_and_upload_task": {
|
84
84
|
"target": self._download_and_upload_task,
|
85
85
|
"name": "_download_and_upload_task",
|
86
86
|
"args": (download_queue, upload_queue, proxies_dict, self.__ini_info, logger),
|
87
|
+
"start_time": 0,
|
87
88
|
},
|
88
89
|
"_go_task_fun_task": {
|
89
90
|
"target": self._go_task_fun_task,
|
90
91
|
"name": "_go_task_fun_task",
|
91
92
|
"args": (download_queue, upload_queue, proxies_dict, self.__ini_info, go_task_function, logger),
|
93
|
+
"start_time": 0,
|
94
|
+
"restart_time": int(restart_time),
|
92
95
|
},
|
93
96
|
}
|
94
97
|
|
95
98
|
for p_item in processes_item_info.values():
|
96
99
|
task_process = multiprocessing.Process(target=p_item["target"], name=p_item["name"], args=p_item["args"])
|
97
|
-
|
100
|
+
processes_item_info[p_item["name"]]["task_process"] = task_process
|
101
|
+
processes_item_info[p_item["name"]]["start_time"] = get_time_now_timestamp(is_time_10=True)
|
98
102
|
task_process.start()
|
103
|
+
logger.warning(f"进程已启动,{task_process.is_alive()},{task_process.name},{task_process.pid}")
|
99
104
|
|
100
105
|
while True:
|
101
106
|
time.sleep(10)
|
102
|
-
for
|
107
|
+
for p_item_info in processes_item_info.values():
|
108
|
+
task_process = p_item_info["task_process"]
|
109
|
+
task_process_start_time = p_item_info["start_time"]
|
110
|
+
task_process_restart_time = p_item_info.get("restart_time",0)
|
103
111
|
# 检查子进程是否存活
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
112
|
+
task_process_pid = task_process.pid
|
113
|
+
task_process_name = task_process.name
|
114
|
+
task_process_is_alive = task_process.is_alive()
|
115
|
+
if not task_process_is_alive:
|
116
|
+
logger.critical(f"进程不存在,{task_process_is_alive},{task_process_name},{task_process_pid}")
|
117
|
+
p_item = processes_item_info[task_process_name]
|
108
118
|
task_process = multiprocessing.Process(target=p_item["target"], name=p_item["name"],
|
109
119
|
args=p_item["args"])
|
110
|
-
|
120
|
+
|
121
|
+
processes_item_info[task_process_name]["task_process"] = task_process
|
122
|
+
processes_item_info[task_process_name]["start_time"] = get_time_now_timestamp(is_time_10=True)
|
111
123
|
task_process.start()
|
124
|
+
logger.warning(f"进程已重启,{task_process.is_alive()},{task_process.name},{task_process.pid}")
|
125
|
+
else:
|
126
|
+
if not task_process_restart_time:
|
127
|
+
continue
|
128
|
+
if task_process_start_time+task_process_restart_time <= get_time_now_timestamp(is_time_10=True):
|
129
|
+
logger.critical(f"进程已超过设置时间,正在强制关闭进程,{task_process_restart_time},{task_process_is_alive},{task_process_name},{task_process_pid}")
|
130
|
+
task_process.terminate()
|
131
|
+
task_process.join() # 等待进程确实结束
|
132
|
+
p_item = processes_item_info[task_process_name]
|
133
|
+
task_process = multiprocessing.Process(target=p_item["target"], name=p_item["name"],
|
134
|
+
args=p_item["args"])
|
135
|
+
|
136
|
+
processes_item_info[task_process_name]["task_process"] = task_process
|
137
|
+
processes_item_info[task_process_name]["start_time"] = get_time_now_timestamp(is_time_10=True)
|
138
|
+
task_process.start()
|
139
|
+
logger.warning(f"进程已重启,{task_process.is_alive()},{task_process.name},{task_process.pid}")
|
112
140
|
|
113
141
|
def __get_external_ip(self, logger):
|
114
142
|
"""
|
@@ -224,8 +224,8 @@ if __name__ == '__main__':
|
|
224
224
|
color=True, mode='a', save_time_log_path='./logs')
|
225
225
|
# import time
|
226
226
|
# while True:
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
227
|
+
logger.debug("debug message")
|
228
|
+
logger.info("info level message")
|
229
|
+
logger.warning("warning level message")
|
230
|
+
logger.critical("critical level message 你好")
|
231
|
+
time.sleep(1)
|
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
|
{xtn-tools-pro-1.0.0.4.9 → xtn-tools-pro-1.0.0.5.1}/xtn_tools_pro.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|