From 0010be1b6b6a1cbf16198d6492e25786b8849c8f Mon Sep 17 00:00:00 2001 From: maxinxin <728892034@qq.com> Date: Fri, 20 Jun 2025 13:35:41 +0800 Subject: [PATCH] xinxin --- __pycache__/config.cpython-312.pyc | Bin 0 -> 345 bytes __pycache__/tools.cpython-312.pyc | Bin 50262 -> 46152 bytes asd.py | 1 - .../dw_clienttrader.cpython-312.pyc | Bin 0 -> 38088 bytes autobasic/dw_clienttrader.py | 82 ++++++++++---- scheduler_init_proxy.py | 107 ------------------ tools.py | 42 ++++--- 7 files changed, 90 insertions(+), 142 deletions(-) create mode 100644 __pycache__/config.cpython-312.pyc delete mode 100644 asd.py create mode 100644 autobasic/__pycache__/dw_clienttrader.cpython-312.pyc delete mode 100644 scheduler_init_proxy.py diff --git a/__pycache__/config.cpython-312.pyc b/__pycache__/config.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..072d452b364c412f8e2dfa01943b617cd01aacfb GIT binary patch literal 345 zcmX@j%ge<81T!`TXE-r3FgylvU;xMmgU=E`YC1y-Lli>_V-#ZwQxsDQa};w5OB72b zt0vnmF5koo*SwOV{DR6`Jjun`S%yZ&CZ=ZQ7Pr_;ObZi}EpKt;8I>eknxrLH={Z}) z1Qg|`7bWH@xMk*~7At5}SeR*o#40k=GE<8XEWOluS9^HWN5QtgWPfVx3JQLGFkJ}@&fGCp7z kZeY2=E!n{FfrCLvs)6r@pmYP@2Q~&FXU0apA|9YR0Pr_zTmS$7 literal 0 HcmV?d00001 diff --git a/__pycache__/tools.cpython-312.pyc b/__pycache__/tools.cpython-312.pyc index 9b1bd47c6465faaca5ce4531c9030ed81e1cc725..119770c8a947b76ff184c5401829f1f5f2b2ffcb 100644 GIT binary patch delta 10459 zcmbt)X?Rq}mFQi1x$0F?w{{5$ErKR~y)q zKkq`HTXm}H)TvWdXS@2x9`QGy3%1`{ttJkhj?Xu@?A~+0mb&s^1&%w&$(+plIXAuq zKOYd>0 zXKiM;nY}g6c>l!v?smza6PW3q$#Vjy%v5qu@hAn3+g7W+HQ1@W-1%~xQqUyGrf!{k zmb_@ZX71Lz3+2VKMVT#I6&GOVG#O+YVCTw9WVpCnt4ta`Gt(``f^OcuK%ND)O1Ti=ee!I8Rk91!3m|^bZ4At_o zPI(>-x?e7WE{j-~V(3z$EIuWU^SeYYg|DwlPV?aQcM@MzA*FyJ3#l)C zhM@wB3+VpzbVD^3@2794mljvy5Z)JwgZKDUIXNT|v6jYAFsL*}Jv)6(KH>&c^Pnx` zGqF;Y!X&h-)#D4RCan|>k!a)i>4JV7r-vWz-tAdXf{V^~2(-+YL%a6G(bSEO#CAaz zPKy&V?-1KX`sGF^U8a-hr+;Y?WF3t^-L&nowd)RX zM+B5kr)-~E-=km#I&@FzfY8HQX(#_b5KNj*uwD0U8m;5BrYN`)>)VP~RBzotLe0b* z$f@=Dl}KmK>|IrrE=2Bv^RAGoQn9j2A$71mmq6;_#cpofk}WL?QF6TSBe7u67i`Xf z%YXzU^K!gFIVU>V4){hT5>X;KzF-bfqD1jV+svDzUJ}jmhnjuCn<8pqk_5z?zd8Bk z$Lkw5EREd#gxe=Wg*fjP^Wp zegCUpyw_V?TpY`Qv7_&GjlQ+_dhc7GAKwSvZocs2(Vz8=_8f$ERrLC!su=Y)sCp#` zdLm{+D{!6ezxMOPqtE>8<_j-Z=fqGQeSYSzulMd9efGrl*SfABeM4j5#}p)Nb*C@rjYUJMxh5R;`x?Db zUnoe>6skI9SEnyZ)KJ@6b=r;5zR55s^3ua(B@UDal6vGGPDyE926c3qviw2 zl1(^rGmealwuTj^{9JnS7^1f#+6H@|?W-s3jkbUQ!eN5SFM_HHG+*b0+KY=QQ4jWR zB|&KVHTJmyhP#XVEUC7ueoSZ7Td&$uMr?UQw!BNWf)QKMkge!SLiUM-F_E(u-{u6n zsYe_$aB-GCsaM)(x++;O+Ukd;2k)3Ty{V^YSeJU$o*+8ADRW zz?xyH0A`+~epl~_PHTsy!U=|Onu#(p_dl0Ar&Im&W#eTj=Z|*+JZDL|#qoNpDp|%v zcz=CoxrP(;mB4(zZD7Yh<3(HUu$0HvQZXVe_*h!-^_U(ye0^u$_;^^ewa2>|_v&k; zlklg=O4#)78g5NF_d#;ak~)F=Wzx#bx^nI}<#B74ioaRH1N=~kt1A&dG^f?g5kH)x z$8vex+IaE9`^{_3;zwrv+IYHc&LQ4L4Rdn`7tj5@V46CQbYAh_CUwIsTi?i7bXiTP0gH<-mGqi1fZhjBcRRb7&xRs2DWSZjC~Fo3r52qJltCft*vYrn+E#b;0K1 zf+n&CX@4I9Djd>~01tO1lqG!`M9^xf(r2U3sR!|{JsFXcB5F1$a$Yr+)izr>t_7Z&}Lf8-UM1zi~u zL%=l1PACEK@8FCah9=bz4f%bMDCxtB2>QciWSnRua5Q<7{%*-qa1gCa7xPj2z|u2m zxQq2JF=l}G^`8FGXOEIO*mDkbEL&5w7mEW3P9ivqARYk@WBwTlV+nzk_AIMq3n5{8 zc6k-G)I5-Yl89iup?Py;FKwyGbnXKT^Yyy8E6J%ny8UL7KnH3b+4wW)3FhrQyg;yF za3N)vsEJeOCCw4luze@Krw%0aB9%jm}+ELc=?uYUofTqaFcMz}&z67rKgYO1YIe-sId!B`+-f|7P&5W=M) za6w<8hikvC{&Pb57>3;|qz@2>-~~FgI!W924+j6R`j6tgVZf@oCK3vezr&&c)>hXN z4fx3{9CV4{NQ26kkV7JY^+Q^ zqA#smm9iEPE;GTo$Ylioh+u@?0(y_o^z}u_iGWZ|5jaC0CE)e>$rpe)M;~AR4WBUR zuBUu1vQrBiw+wsgl*X12=r0k32Zv4vIPwg&ZzwE%6N(Y6YeK`$NitY}f5l$v$@^HoKo84#psFs&1$;eyuW1b}R!UZ&@;NDx z6+nlq1i-}ggr;0T0g_g5g2`%VSPxh5wjFx^v5UJSnDmaZRL43j za1$d+vIOZZLwe(WSWcIw-B!{cHf8Z!Vg9E1tFRL?Kx(lk-tmcnRC znOv?2%Qa0bx4$Kg-$Z}ZQj#x=kdH9RI)IX_2N)+C0GebYK(j0Xw9pb?bp{H7#m%z; zV%#iqeu#twu3bmH`Xu_;9xJVk`gSdVXHgQXXPteH&mWqU3hY zgZG;~?ZP2WHbjwKtv;CvfiO($&_@$kXl%+cSz#FNlGcqTyqiRqY)_&~x7n!UU5BtO zm2NC`@ENp!RyxM2C@J=A%cRFQI&HEvF@1*ti0)3vopi}IyEa1}wpfi*0Ugjue_4Mr(mIMXMDwSUofI=r~ErE->Go(DpWI!f9#K6+>jE@*di@ed%&kS7a#wmyM!q9t(!3n z46K1j(XS9yS65&Apes(ZWatU1x*&{I4YhvdNyV?tY6g~?72;tnVpAZh3QaAl(Ae@F z=^JKb+wAMuh++>og}$iA^L;$6g*-%?UEC*9!e^4BN9Z&6n)_ECtGF!9zUE9lxcU~New)|?@0&N1g(S;w=^r3_nZdW0*IiG?BJu#|~q zTtw}#lrcHsj3H^p02!8Y$0_6vS#vL0^Rj&ep@=Lv&Eqt&%P}NL|7k}CX!ER~pKb{yY+?kA;G|(H;#)LS z9kxso!OEL>7QV$7i}O}rmh#!UpQ_f@40bC-zD1NgIeoFL&uJh^AT&c2oE3D_GvUIA z840No5|R+~`@cwAKLpa-AGNb2r%;-Faoa|tn zfb8pC)_c9spWyyI0v%NS%2mrBTCKUIxPJr%PNE2Kg#;NSZ3vhVVrBtNEZK-S1WzKj z^8wY(eJKcfX-q2P=9Zr+I$3m^%hKoFTA~AB(dly$6d+*LS+^0V`L!DdzaSRDiGG7i z1g{MYx2nVB31n*Ru{48br)hC))3|@dZZrWc6d}(73-8mHVyoahfNM)5^@&bdkVRQ{ z3Y`&nKt}_MG+|?UW;=XIY3IR6fPSAyv3CgV!e-88puc+Z@99fB^ElR!!nfqq<&hDSzzhl5Lu<_-jOQvi{eVA=sYYD95?DDk1eYWONyYY+Kr6mK>HC%Ka1QSOzK5^C5Q10{*bt!M(<0knV@XDEFL?)@+2Q03w6ddS z!j;6}@Ic2Oc*x#A)w#8txfEuN&O9IinerB;al2DQM%;^_a#pHmEbAQL27g8kslP) z;hf|+c6${8n`iChWN#quO$4QY!%Ux_Os*DkVoYtlh3#)pbN3uzsIt41FQCocXMnB8 zA5I%A-D4N+1vr>Dv2##Q=F$y4HJwuvBWcZP{SZrK2p9|HSYpmm1(YC6!0EuV56BD) zPOvYiL{uHVRC_QKga{!VZS^oTsl?6+@U;P~aU|?*9M5HtJxEp7Bhyv%g4=1p+oz_| z2YXX#ZSPFJYOtmEKMedK>gmtt*U;{Mmw5m?{|Lcadal2^>}4pbmW?rmwAO(JeE^Q| zIc(jCl#Ht&Mne>f719x(M)M9d<}zWO!J)>WveOgrHmXLVG<#ZPKY0$jh3Sa{_uG&^ z)ewm_;LWI~Umn;9VqNk4Jl;JRe*PbH2DYcaqN@(p$6*3Q<#XHSQfp5(J%4c7G^yft zstK5mt`9|PL$RQ|3iYmPP=bviSrAxapeiw^&M;_Tzqava&f$Fsx`JMe6q z=g`Ox*CwO7g&<8RE>-!4Ns~w~{cyhUkw~SZMGvs}-B_kQ5QSGDWBORkCs(NYhSsPO zVObe1%0h*tT^FX&^duaMw6JrF5~N*67gb}#{%tv3hkZ=vTEix4WPvnY@#=qUV%LIMp{Wqo*aCS0g+w51&xEC`dUS%zNES*F z;~3yX`3@e5_{B`+kgL!G)ZRycBc=4$ zuji)VeN**Mdi^nFGFSxa^uJ$EF&MziTo-A^8;?#LEKsWSxi=nK!V*OyL1xHjNFlC8 z*(Lj$l}Hpke;p(~sHuWr+=UbUqf;!z~;GOJQ7 zq7ZcF!N~79QO;+fb_3n_qI>? zFP?t&wwF(#kN&u@b1tkAG%m_kQ^qJ2mTDkxBMuoNNR{OvRFEl_MEg%tVle0FMCy79D4b zolHiO9P)s6@CAtr+WEnU&b%#X8^%$v*}_(iZrq&@p93Yj?wwKtcqBqBhUa_hJoxzZ z`I%R*A3lBk@XzWtXea&pJI8OlaN>*i_Fen=vC&@~ym9o6o4e^~&$-bTpN8(EJ!fyc z(tUm4%(e4f*WT@!81(JyL0^0)yVIqc%FK{V6c@8`sDZQ_#};6~V+`q(xxju2xK@!o zXb0B@Vt!}eqTWRpQ}4TEt{O2f9x^W;F|QahuefAhby2rUyGzh_@CbTBF5@Wc3*Umpz zv!U+u=l*)M@1<+!U%S!&GzjwfeK$^>fiID5SuN3MxVogo8}=1Pecs>>pD$e87z&ht zoZ!y`;^nHHJDTLC(j6@%xT_iN2Wohh^1kuHPp`dy9I}p)PWTG=4hkHTX9WFUHD`WR zWm8jCRT=(Y(9l>}dS9v1SXx$AURilx#e#{m8_~YKJTkGZnnU|KqdIab#kS+u)Q1}!}%wuPs?k})v#qB(bG$s7QnsDnbKf$j_su8~< z<2vG4qsN2!9*+k(Ca6`>V^VbuA@~@;j6eQy4)aAiS)vw9Wh@MtpM{8K?wlJ-K?Gq0 z?8CzcSo#71Cb(HDnx%l5v1aL3miW{>Zsw@5fDIiT)evgf27kW8+y~7lFneI?#1&21 z0@TDzpRx0(1<7l1vU^mYv?vggV}4}`!3-}#}EB}Oxqx(NdrEh hi)p{t#r4kJiy!NMuY>RR*~bi*b%k&rbm{Cq{6C3`;7tGk delta 14079 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 60: - next_minute = 0 - next_execution = now.replace(minute=0, second=0, microsecond=0) + datetime.timedelta(hours=1) - else: - next_execution = now.replace(minute=next_minute, second=0, microsecond=0) - - wait_seconds = (next_execution - now).total_seconds() - logger.info(f"当前时间: {now.strftime('%Y-%m-%d %H:%M:%S')}") - logger.info(f"下次执行时间: {next_execution.strftime('%Y-%m-%d %H:%M:%S')}") - logger.info(f"等待 {wait_seconds:.0f} 秒") - - return wait_seconds - -def main(): - """主函数""" - logger.info("代理重置定时器启动") - logger.info("脚本将在每整十分钟执行一次 init_proxy.py") - - # 首次执行 - logger.info("执行首次代理重置...") - execute_init_proxy() - - # 定时循环 - while True: - try: - wait_seconds = wait_for_next_execution() - time.sleep(wait_seconds) - - logger.info("开始执行定时任务...") - execute_init_proxy() - - except KeyboardInterrupt: - logger.info("接收到中断信号,程序退出") - break - except Exception as e: - logger.error(f"定时器运行异常: {e}") - # 发生异常时等待60秒后继续 - time.sleep(60) - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/tools.py b/tools.py index 5ccb8a5..09011f0 100644 --- a/tools.py +++ b/tools.py @@ -633,46 +633,60 @@ class Logger(): """ def __init__(self, path, name, Flevel=logging.DEBUG): + import os + # 确保日志目录存在 + os.makedirs(path, exist_ok=True) + self.time = time.strftime("%Y-%m-%d") - self.fileName = path + '/' + name + ".log" - self.logger = logging.getLogger(self.fileName) + self.fileName = os.path.join(path, name + ".log") + + # 为每个实例创建唯一的logger名称,避免重复 + logger_name = f"{name}_{id(self)}" + self.logger = logging.getLogger(logger_name) self.logger.setLevel(Flevel) - if not self.logger.handlers: - fmt = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S') - fh = logging.FileHandler(self.fileName, encoding='utf-8') - fh.setFormatter(fmt) - fh.setLevel(Flevel) - self.logger.addHandler(fh) + + # 清除已有的处理器,避免重复 + self.logger.handlers.clear() + + # 设置格式 + fmt = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S') + + # 文件处理器 + fh = logging.FileHandler(self.fileName, encoding='utf-8') + fh.setFormatter(fmt) + fh.setLevel(Flevel) + self.logger.addHandler(fh) + + # 控制台处理器 + ch = logging.StreamHandler() + ch.setFormatter(fmt) + ch.setLevel(logging.INFO) + self.logger.addHandler(ch) - @output def debug(self, message): """ This is debug """ self.logger.debug(message) - @output def info(self, message): """ This is info """ self.logger.info(message) - @output def warn(self, message): """ This is warn """ - self.logger.warn(message) + self.logger.warning(message) - @output def error(self, message): """ This is error """ self.logger.error(message) - @output def critical(self, message): """ This is critical