import threading
import time
import sys
import os
def kenny(num=0):
if num > 3:
# print("Kenny dies now...")
# raise SystemExit #Kenny will die, but Cartman will live forever
# sys.exit(1) #Same as above
print("Kenny dies and also kills Cartman!")
os._exit(1)
while True:
print("Kenny lives: {0}".format(num))
time.sleep(1)
num += 1
kenny(num)
def cartman():
i = 0
while True:
print("Cartman lives: {0}".format(i))
i += 1
time.sleep(1)
if __name__ == '__main__':
daemon_kenny = threading.Thread(name='kenny', target=kenny)
daemon_cartman = threading.Thread(name='cartman', target=cartman)
daemon_kenny.setDaemon(True)
daemon_cartman.setDaemon(True)
daemon_kenny.start()
daemon_cartman.start()
daemon_kenny.join()
daemon_cartman.join()
## My example:
if "ATG" in my_DNA:
## <Do something & proceed...>
else:
print("Start codon is missing! Check your DNA sequence!");
exit(); ## as most folks said above
后来,我发现抛出错误更简洁:
## My example revised:
if "ATG" in my_DNA:
## <Do something & proceed...>
else:
raise ValueError("Start codon is missing! Check your DNA sequence!");
10 回答
我是一个新手,但肯定是更干净,更有控制力
...
比
...
编辑
关键是该计划顺利和平地结束,而不是 "I'VE STOPPED !!!!"
另一种方式是:
提前终止Python脚本的一种简单方法是使用内置函数quit() . 无需导入任何库,它既高效又简单 .
例:
虽然你通常应该更喜欢
sys.exit
,因为它比其他代码更多_118258_,但它实际上只是引发异常 .如果您确定需要立即退出进程,并且可能在某个异常处理程序内部会捕获
SystemExit
,则还有另一个函数 -os._exit
- 它立即终止于C级并且不执行任何正常的撕裂 - 翻译;例如,不会执行使用"atexit"模块注册的挂钩 .我刚刚发现,在编写多线程应用程序时,
raise SystemExit
和sys.exit()
都只会杀死正在运行的线程 . 另一方面,os._exit()
退出整个过程 . 这被讨论here.以下示例有2个线程 . 肯尼和卡特曼 . 卡特曼应该永远活着,但肯尼被称为递归,并且应该在3秒后死亡 . (递归调用不是最好的方法,但我有其他原因)
如果我们也希望卡特曼在肯尼去世时死去,肯尼应该离开
os._exit
,否则,只有肯尼会死,卡特曼将永远活着 .来自sys module documentation的详细信息:
请注意,这是退出的'nice'方式 . @ glyphtwistedmatrix下面指出,如果你想要一个'hard exit',你可以使用os._exit(错误代码),虽然它让解释器在进程死之前进行任何清理 .
在Python 3.5中,我尝试在不使用模块(例如sys,Biopy)的情况下合并类似的代码,而不是内置的内容来停止脚本并向用户输出错误消息 . 这是我的例子:
后来,我发现抛出错误更简洁:
尝试在循环后使用break然后使用quit()或exit() .
您也可以使用
exit()
.请记住,Python解释器
sys.exit()
,exit()
,quit()
和os._exit(0)
kill . 因此,如果它出现在execfile()
从另一个脚本调用的脚本中,它将停止执行这两个脚本 .请参阅“Stop execution of a script called with execfile”以避免这种情况 .
作为参数,您可以传递退出代码,退出代码将返回给操作系统 . 默认值为0 .