一.atexit退出处理程序
在程序即将结束之前执行的代码,atexit模块定义了注册和取消清理注册的功能。这样注册的功能在正常解释器终止时自动执行, atexit
以与 注册顺序相反的顺序运行这些功能; 如果你注册A
,B
以及C
在解释终止时间,他们将在顺序运行C
,B
, A
。
atexit.
register
(func,* args,** kwargs )将func注册为要在终止时执行的函数。要传递给func的任何可选参数都必须作为参数传递给 register()
。可以多次注册相同的函数和参数。
在正常的程序终止时(例如,如果sys.exit()
被调用或主模块的执行完成),所有注册的函数都以后进先出顺序调用。假设通常在较高级别的模块之前导入较低级别的模块,因此必须在以后进行清理。
如果在执行退出处理程序期间引发异常,则会打印回溯(除非SystemExit
被引发)并保存异常信息。在所有退出处理程序都有机会运行之后,将重新引发要引发的最后一个异常。
该函数返回func,这使得它可以用作装饰器。
atexit.
unregister
(func )从解释器关闭时要运行的函数列表中删除func。在调用之后unregister()
,当解释器关闭时,即使它被多次注册,也保证不会调用func。 unregister()
如果先前未注册func,则默默无效。
二. os.devnull空文件设备
verbose:bool默认值false,启动详细输出,如果启用 可能无法在多线程上 下文中正常运行
gevent基于协程的网络库,很容易提升系统的并发行
MySQL取出字段值相同的数据:select count(*),sno from ecard-error group by sno having count(sno)>1则会显示出现相同学号的次数
l=[1,3,7,3,2]
s=set(l)
k=list(sorted(s,key=l.index))
print(k)
原文:https://www.cnblogs.com/karenaqi/p/11312248.html