高效python脚本,6小时获取上千台MySQL数据库服务器(上)
理论被骗运行该函数长时刻未毗连端口时会抛堕落误,但在现实进程中,偶然辰不会抛堕落误,措施一向阻塞。去查阅了mysqldb的文档,发明有个毗连超时(connect_timeou)的参数选项(如下图),当毗连超时时会丢弃该毗连。但一测试顿时发明这个参数形同虚设,基础没用! 无奈,只妙手动给函数加上时刻限定,思量了以下两个要领。 要领一:行使signal.SIGALRM信号量,但SIGALRM只能在linux体系下行使 可参考: https://stackoverflow.com/questions/366682/how-to-limit-execution-time-of-a-function-call-in-python 要领二:行使多线程中的join()的超时参数,好比join(3)就是限定了子线程运行的时刻为3秒。 在此我回收要领二: 但同时必要留意的是try...except是无法捕获线程中的报错的,由于线程有独立的栈,线程发生的非常产生在差异的栈上,因此无法捕获到线程的非常。即捕获不到3306端口毗连错误,就无法按照报错信息来说明端口的毗连环境。但假如在线程内部行使try..except来捕获报错的话,线程自身又不返回值,无法汇报主函数端口的毗连环境,也就无法确定是否要举办暗码爆破,可能什么时辰暗码爆破乐成,这时辰又该怎么办呢? 查阅网上的资料,发明有操作类的变量来转达线程内的动静,也有行使Queue库建设行列实例来转达数据的。但总认为有些“痴肥”,不太满足。思索着溘然豁然爽朗,可以在线程运行的函数内部判定端口的毗连环境,然后用threading.Event()的符号配置与否,来转达功效,让主函数知道接下来该怎样运行。配置了符号声名要举办下一步操纵,未配置符号则return退出当前操纵。 关于threading.Event()的基本常识可参考: https://blog.csdn.net/u012067766/article/details/79734630 修改后的主函数: 这里就不放上完备的代码了,由于紧接着顿时又改造了服从。 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |