1111import hashlib
1212import importlib
1313import importlib .util
14- import json
14+ import ujson
1515import logging
1616import os
1717import pickle
@@ -130,7 +130,7 @@ def recv_packet(rfile) -> dict:
130130 raise ValueError ("invalid length" )
131131 payload = recv_exact (rfile , length )
132132 try :
133- return json .loads (payload .decode ("utf-8" ))
133+ return ujson .loads (payload .decode ("utf-8" ))
134134 except Exception :
135135 return pickle .loads (payload )
136136
@@ -251,7 +251,7 @@ def _parse_env(env_str: str):
251251 ext = ""
252252 if isinstance (env_str , str ) and env_str .strip ():
253253 try :
254- data = json .loads (env_str )
254+ data = ujson .loads (env_str )
255255 proxy_url = data .get ("proxyUrl" , "" ) or ""
256256 # 仅从解析出的字典取 ext 字段,若不存在则为空字符串
257257 ext = data .get ("ext" , "" ) or ""
@@ -629,7 +629,7 @@ def _invoke(self, inst: SpiderInstance, method_name: str, args_list):
629629 parsed_args .append (a )
630630 elif isinstance (a , str ):
631631 try :
632- parsed_args .append (json .loads (a ))
632+ parsed_args .append (ujson .loads (a ))
633633 except Exception :
634634 parsed_args .append (a )
635635 else :
@@ -684,12 +684,14 @@ class T4Handler(StreamRequestHandler):
684684 def handle (self ):
685685 self .request .settimeout (REQUEST_TIMEOUT )
686686 try :
687+ logger .info ('before recv_packet' )
687688 req = recv_packet (self .rfile )
689+ logger .info ('before recv_packet req' )
688690 script_path = req .get ("script_path" , "" )
689691 method_name = req .get ("method_name" , "" )
690692 env = req .get ("env" , "" ) or ""
691693 args = req .get ("args" , []) or []
692-
694+ logger . info ( "T4Handler start: script_path:%s method_name:%s" , script_path , method_name )
693695 result = _manager .call (script_path , method_name , env , args )
694696 # 统一外层返回格式
695697 resp = {
@@ -705,7 +707,10 @@ def handle(self):
705707
706708 send_packet (self .wfile , resp )
707709 except Exception as e :
708- logger .error ("T4Handler error: %s" , e )
710+ if "peer closed during read" in str (e ).lower ():
711+ logger .warning ("Client connected then closed without sending data" )
712+ else :
713+ logger .error ("T4Handler error: %s" , e )
709714 try :
710715 send_packet (self .wfile , {"success" : False , "error" : str (e )})
711716 except Exception :
@@ -723,6 +728,7 @@ def _stop(*_):
723728 _manager .stop ()
724729 # 让 serve_forever() 退出
725730 srv .shutdown ()
731+ sys .exit (0 ) # 保证退出码是 0
726732
727733 if os .name == "posix" :
728734 signal .signal (signal .SIGTERM , _stop )
0 commit comments