Python中如何在一段时间后停止程序

写了一个分析大数据的python程序,由于要分析的数据量可能会很大,有时运行的时间会很长。服务器上的设置是有进程运行超过10分钟会自动Kill该进程,所以我希望我的程序在运行到9分50秒的时候可以Print一条警报“Warning: Timeout”。

请问需要如何修改程序才能达到此目的,能否只在程序头尾添加语句而不改变程序内部结构?

以下面一个无线循环的Loop为例,如何修改能让它在10秒后打印一条警报?

def func(a,b):
while True:
a=a+b
print a
func(1,2)

用到threading的Timer,也类似单片机那样子,在中断程序中再重置定时器,设置中断,python实例代码如下:

import threading

import time

def change_user():

    print('这是中断,切换账号')

    t = threading.Timer(3, change_user)

    t.start()

#每过3秒切换一次账号

t = threading.Timer(3, change_user)

t.start()

while True:

    print('我在爬数据')

    time.sleep(1)

扩展资料

有时当一个条件成立的情况下,需要终止程序,可以使用sys.exit()退出程序。sys.exit()会引发一个异常:

1、如果这个异常没有被捕获,那么python编译器将会退出,后面的程序将不会执行。

2、如果这个异常被捕获(try...except...finally),捕获这个异常可以做一些额外的清理工作,后面的程序还会继续执行。

注:0为正常退出,其他数值(1-127)为不正常,可抛异常事件供捕获。另一种终止程序的方法os._exit()

一般情况下使用sys.exit()即可,一般在fork出来的子进程中使用os._exit()

采用sys.exit(0)正常终止程序,程序终止后shell运行不受影响。

采用os._exit(0)关闭整个shell,调用sys._exit(0)后整个shell都重启了(RESTART Shell)。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-25
#python 2.7
import time #导入 time类
start=time.clock()
def func(a,b):
while True:
end=time.clock ()
if int(end-start)==10:
print('Warning: Timeout!!'*5)
break
a=a+b

print a
func(1,2)

主要思路:开始时间-当前时间=10则停止运行并输出时间到了(注意缩进)追问

多谢。方法是很简洁,但是有一个小问题啊。
我给的这个例子里func的功能很简单,只有a=a+b这样简单的计算。如果function里的计算量会很大。如果只在循环开头判定时间的话,如果在某次循环内就达到时间上线的话,来不及进行下一次循环判定时间就会被服务器Kill了,这样会答应不了警报信息哦。请问有没有办法实时监控时间呢?比如每秒判定一次时间,类似于独立于主程序之外再创建一个监控时间的进程。有办法实现吗。。。

追答

你说的我考虑过,但是情况都一样的,怎么样都要消耗资源,只要你去计算时间。
有比较好的方法就是:再建立一个进程,单独的在主程序运行时他运行,然后他只做计时,10秒后在print。但这样的方法比较复杂。
另外:如果从解决问题角度出发的话,有很多的办法啊,可以同时执行2个程序,一个是主程序,一个是只做计时等待警告程序,可以用批处理。
python warn.py
python main.py
做成bat就行了。相对而言等待程序消耗资源很少。也可以直接用批处理去等待,效率更高

本回答被提问者和网友采纳
第2个回答  2013-04-04
建议你另起一个timer的线程,计算时间并输出警告。送你一段定时器timer的代码。
使用前先做一个简单试验:
import threading def sayhello():
print "hello world"
global t #Notice: use global variable!
t = threading.Timer(5.0, sayhello)
t.start()

t = threading.Timer(5.0, sayhello)
t.start()

运行结果如下
>python hello.py
hello world
hello world
hello world
下面是定时器类的实现:
class Timer(threading.Thread): """
very simple but useless timer.
"""
def __init__(self, seconds):
self.runTime = seconds
threading.Thread.__init__(self)
def run(self):
time.sleep(self.runTime)
print "Buzzzz!! Time's up!"

class CountDownTimer(Timer):
"""
a timer that can counts down the seconds.
"""
def run(self):
counter = self.runTime
for sec in range(self.runTime):
print counter
time.sleep(1.0)
counter -= 1
print "Done"

class CountDownExec(CountDownTimer):
"""
a timer that execute an action at the end of the timer run.
"""
def __init__(self, seconds, action, args=[]):
self.args = args
self.action = action
CountDownTimer.__init__(self, seconds)
def run(self):
CountDownTimer.run(self)
self.action(self.args)

def myAction(args=[]):
print "Performing my action with args:"
print args

if __name__ == "__main__": t = CountDownExec(3, myAction, ["hello", "world"])
t.start()追问

请问我的那段代码应该放在什么位置?我对编程还是门外汉。。。。

第3个回答  2018-08-13
把程序单开成一个线程或者进程,最好开进程,python的多线程。。。不太好用,然后用time模块等待几秒,之后直接结束进程就行。
第4个回答  2013-04-04
用装饰器能做到。不过有点技巧

Python中如何在一段时间后停止程序
用到threading的Timer,也类似单片机那样子,在中断程序中再重置定时器,设置中断,python实例代码如下:import threading import time def change_user():print('这是中断,切换账号')t = threading.Timer(3, change_user)t.start()每过3秒切换一次账号 t = threading.Timer(3, change_user)t.start(...

python中的sleep函数
要使用sleep函数,首先需要导入Python的time模块。然后,通过调用time模块中的sleep函数,并传入一个参数,来实现程序的暂停。例如:`time.sleep`,这将使程序暂停执行5秒。需要注意的是,这个时间是以浮点数表示的,所以你可以传入小数来暂停更精确的时间段。三、sleep函数的实际应用场景 在实际编程过程中...

python如何结束程序运行
方法1:采用sys.exit(0),正常终止程序,从图中可以看到,程序终止后shell运行不受影响。相关推荐:《Python教程》方法2:采用os._exit(0)关闭整个shell,从图中看到,调用sys._exit(0)后整个shell都重启了(RESTART Shell)。方法3:采用Ctrl+C快捷键,强制终止程序执行,可以看到,程序由“KeyboardIn...

怎样让python运行完了不直接退出?
通过调用time.sleep函数,可以让程序暂停指定的时间。例如,在程序最后加上`time.sleep`,程序会在运行结束后暂停10秒钟,然后自动退出。这种方式适合于不需要用户交互,但需要程序运行完成后延迟退出的场景。需要注意的是,要使用time模块,需要在程序开头导入该模块,如`import time`。通过后台运行的方式 ...

批处理文件如何隔一段时间让自身关闭?
比如说原批处理为: @echo off python.exe -a 把它改为: @echo off set timeout=10000 rem 设置超时时间为10000毫秒 echo wscript.sleep %timeout%>sl.vbs start python -a cscript \/\/nologo sl.vbs taskkill \/f \/im python.exe 这样,超时后,程序python.exe就会被强制结束 ...

详解python中break语句的用法
Python中的break语句主要用于终止循环,包括for循环和while循环。当程序执行到break语句时,会立即跳出当前循环,不再继续执行后续循环内容。具体用法可以分为以下几种情况:一、用于循环中终止循环 当我们在循环过程中遇到某个条件,需要立即终止循环时,可以使用break语句。例如:在遍历一个列表时,如果找到...

python程序如何让其暂停
1、input();这种方法不用包含模块,因此这也是最常用的一种暂停手段。Python2中的raw_input()和input()语句在Python3中已经被合并到input()中。2、os.system("pause");这种方法需要包含os模块(import os),在windows下IDLE运行会弹出cmd命令行,进行暂停操作,直接运行.py文件会直接在命令行中暂停...

python里怎么终止程序的执行
quit() exit()执行到此命令时,程序终止。如果是程序陷入死循环,想强制结束,则按Ctrl + C。这个特别关键。Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好...

Python 中的断点类型详解
在代码中设置断点时,需要导入pdb模块,然后在需要断点的位置调用pdb.set_trace()函数。当程序执行到pdb.set_trace()处时,会进入交互式调试模式。在调试模式中,可以使用一系列命令来检查变量、执行代码和探查程序状态。IPython魔术命令在交互式Python环境中特别有用。例如,使用%debug命令可以进入交互式...

python进程运行多少时间自动退出
Python中如何在一段时间后停止程序用到threading的Timer,也类似单片机那样子,在中断程序中再重置定时器,设置中断,python实例代码如下:importthreading importtime defchange_user():?print('这是中断,切换账号')?t=threading.Timer(3,change_user)?t.start()每过3秒切换一次账号 t=threading.Timer(3...

相似回答