ladyrick 0.5.5__py3-none-any.whl → 0.5.6__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.
- ladyrick/cli/multi_ssh.py +26 -13
- ladyrick/cli/test_signal.py +2 -2
- {ladyrick-0.5.5.dist-info → ladyrick-0.5.6.dist-info}/METADATA +1 -1
- {ladyrick-0.5.5.dist-info → ladyrick-0.5.6.dist-info}/RECORD +8 -8
- {ladyrick-0.5.5.dist-info → ladyrick-0.5.6.dist-info}/WHEEL +0 -0
- {ladyrick-0.5.5.dist-info → ladyrick-0.5.6.dist-info}/entry_points.txt +0 -0
- {ladyrick-0.5.5.dist-info → ladyrick-0.5.6.dist-info}/licenses/LICENSE +0 -0
- {ladyrick-0.5.5.dist-info → ladyrick-0.5.6.dist-info}/top_level.txt +0 -0
ladyrick/cli/multi_ssh.py
CHANGED
@@ -52,14 +52,14 @@ def remote_head():
|
|
52
52
|
def handle_signal(sig, frame=None):
|
53
53
|
if sig == signal.SIGUSR2:
|
54
54
|
# SIGUSR2 trigger force_kill manually
|
55
|
-
|
55
|
+
log("SIGUSR2 received. force kill")
|
56
56
|
force_kill(child, child_pgid)
|
57
57
|
else:
|
58
|
-
|
58
|
+
log(f"forward signal {sig} to {child.pid}")
|
59
59
|
try:
|
60
60
|
os.kill(child.pid, sig)
|
61
61
|
except ProcessLookupError as e:
|
62
|
-
|
62
|
+
log(str(e))
|
63
63
|
|
64
64
|
for sig in [signal.SIGHUP, signal.SIGINT, signal.SIGTERM, signal.SIGUSR1, signal.SIGUSR2]:
|
65
65
|
signal.signal(sig, handle_signal)
|
@@ -202,12 +202,17 @@ class RemoteExecutor:
|
|
202
202
|
except (BrokenPipeError, OSError) as e:
|
203
203
|
log(e)
|
204
204
|
|
205
|
+
def terminate(self):
|
206
|
+
if self.process is not None and self.process.poll() is None:
|
207
|
+
log("terminate RemoteExecutor")
|
208
|
+
self.process.terminate()
|
209
|
+
|
205
210
|
def poll(self):
|
206
211
|
assert self.process is not None
|
207
212
|
return self.process.poll()
|
208
213
|
|
209
214
|
|
210
|
-
def signal_repeat_checker(sig_to_check,
|
215
|
+
def signal_repeat_checker(sig_to_check, duration: float):
|
211
216
|
last_int_signal_time = []
|
212
217
|
|
213
218
|
def checker(sig: signal.Signals):
|
@@ -217,11 +222,8 @@ def signal_repeat_checker(sig_to_check, count, duration):
|
|
217
222
|
threadhold = cur_time - duration
|
218
223
|
last_int_signal_time = [t for t in last_int_signal_time if t >= threadhold]
|
219
224
|
last_int_signal_time.append(cur_time)
|
220
|
-
|
221
|
-
|
222
|
-
log(f"received {sig_to_check.name} for {count} times or more in {duration} second(s)")
|
223
|
-
return True
|
224
|
-
return False
|
225
|
+
return len(last_int_signal_time)
|
226
|
+
return 0
|
225
227
|
|
226
228
|
return checker
|
227
229
|
|
@@ -290,16 +292,27 @@ def main():
|
|
290
292
|
for executor in executors:
|
291
293
|
executor.start()
|
292
294
|
|
293
|
-
|
295
|
+
import rich
|
296
|
+
|
297
|
+
checker = signal_repeat_checker(signal.SIGINT, duration=1)
|
294
298
|
|
295
299
|
def handle_signal(sig, frame):
|
296
|
-
|
300
|
+
log(f"received signal {sig}")
|
301
|
+
sig_count = checker(sig)
|
302
|
+
if sig_count >= 3:
|
297
303
|
sig = signal.SIGUSR2
|
298
|
-
|
304
|
+
if sig_count == 3:
|
305
|
+
rich.print("\n[bold magenta]Can't wait. Try to froce kill remote processes...[/bold magenta]")
|
299
306
|
else:
|
300
|
-
|
307
|
+
rich.print(
|
308
|
+
f"\n[bold green]Received {signal.Signals(sig).name}, forwarding to remote processes...[/bold green]"
|
309
|
+
)
|
301
310
|
for executor in executors:
|
302
311
|
executor.send_signal(sig)
|
312
|
+
if sig_count >= 4:
|
313
|
+
rich.print("\n[bold red]Really Can't wait!!! Froce kill local processes and exiting right now![/bold red]")
|
314
|
+
for executor in executors:
|
315
|
+
executor.terminate()
|
303
316
|
|
304
317
|
for sig in [signal.SIGHUP, signal.SIGINT, signal.SIGTERM, signal.SIGUSR1, signal.SIGUSR2]:
|
305
318
|
signal.signal(sig, handle_signal)
|
ladyrick/cli/test_signal.py
CHANGED
@@ -5,8 +5,8 @@ import time
|
|
5
5
|
|
6
6
|
def handle_signal(sig, frame):
|
7
7
|
print(f"received signal {sig}, {signal.Signals(sig).name}", flush=True)
|
8
|
-
|
9
|
-
|
8
|
+
if sig in {signal.SIGTERM, signal.SIGINT, signal.SIGHUP}:
|
9
|
+
sys.exit(0)
|
10
10
|
|
11
11
|
|
12
12
|
for sig in [s for s in vars(signal).values() if isinstance(s, signal.Signals)]:
|
@@ -10,20 +10,20 @@ ladyrick/typing.py,sha256=YQeApe63dk7yL4NS5ytlR6v3dLCii2-qsXNlUvjK-zw,203
|
|
10
10
|
ladyrick/utils.py,sha256=jRRaqC6kNbCJPGeE0YisFgis-wiuINLik1mcUQtytow,608
|
11
11
|
ladyrick/vars.py,sha256=VbFh2u7XybUaBuiYEXBa4sOmoS99vc2AIXdYLBh8vjk,3763
|
12
12
|
ladyrick/cli/calc.py,sha256=5_UhSSaL_K9FBCHg3zuCk41CHJXy3QAh__qCabbffQY,1438
|
13
|
-
ladyrick/cli/multi_ssh.py,sha256=
|
13
|
+
ladyrick/cli/multi_ssh.py,sha256=d_7zPvmfVUQZVcxhCFj37ktTOb0-AzxSEr0z6ipMY9U,10403
|
14
14
|
ladyrick/cli/psf.py,sha256=JLk3gbPn7E3uuPBbzGvLgJmFQlilA6zg_Xlg7xW5jik,1146
|
15
15
|
ladyrick/cli/tee.py,sha256=UMJxSJLOEfbV43auVKRTIJ5ZAMAkAfj8byiFLk5PUHE,3579
|
16
16
|
ladyrick/cli/test_args.py,sha256=f5sUPDlcf6nbNf6UfLwZQI5g5LN8wlFBQZ10GLw22cg,212
|
17
|
-
ladyrick/cli/test_signal.py,sha256=
|
17
|
+
ladyrick/cli/test_signal.py,sha256=uvVLbHlvpmYgZcfRF9Lcte0OJJrMDDsmId3BpSxeaOA,490
|
18
18
|
ladyrick/patch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
19
19
|
ladyrick/patch/print.py,sha256=Ks_ONpeLOyC9pFKLmAiNliwGPbJyt9qz-cnRUPVto34,845
|
20
20
|
ladyrick/patch/rich_print.py,sha256=z3Ea1VCunXZvNvEDFHpoyWc8ydINmh-gOIJ1ssscs6s,841
|
21
21
|
ladyrick/patch/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
22
|
ladyrick/patch/python/__main__.py,sha256=BAGy1phd26WWcGM9TKHbqIpeZliVofopBndtMIPtDQ0,651
|
23
23
|
ladyrick/patch/python/usercustomize.py,sha256=8mYpcZ8p-l41fiSJue727n8cAmcEmUktObDYZDdLJfs,218
|
24
|
-
ladyrick-0.5.
|
25
|
-
ladyrick-0.5.
|
26
|
-
ladyrick-0.5.
|
27
|
-
ladyrick-0.5.
|
28
|
-
ladyrick-0.5.
|
29
|
-
ladyrick-0.5.
|
24
|
+
ladyrick-0.5.6.dist-info/licenses/LICENSE,sha256=EeNAFxYAOYEmo2YEM7Zk5Oknq4RI0XMAbk4Rgoem6fs,1065
|
25
|
+
ladyrick-0.5.6.dist-info/METADATA,sha256=s-vKvkA34C7DS3PXt2QygfVzhmBxSJC42bawDe_QC8Q,883
|
26
|
+
ladyrick-0.5.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
27
|
+
ladyrick-0.5.6.dist-info/entry_points.txt,sha256=28kidI1OCOAi7S1aHBr8veak49VNZ0tWFvf-Ty8UmSU,225
|
28
|
+
ladyrick-0.5.6.dist-info/top_level.txt,sha256=RIC3-Jty2qzLYXSOr7fOu1loTwlMU9cF6MFeGIROxWU,9
|
29
|
+
ladyrick-0.5.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|