60秒后结束python代码
下面是一些功能完整的代码 我计划通过命令行执行这段代码,但是我希望它在60秒后结束 有人知道最好的方法吗 提前谢谢60秒后结束python代码,python,Python,下面是一些功能完整的代码 我计划通过命令行执行这段代码,但是我希望它在60秒后结束 有人知道最好的方法吗 提前谢谢 import time class listener(StreamListener): def on_data(self, data): try: print data saveFile = open('twitDB.csv','a') saveFile.write(data)
import time
class listener(StreamListener):
def on_data(self, data):
try:
print data
saveFile = open('twitDB.csv','a')
saveFile.write(data)
saveFile.write('\n')
saveFile.close()
return True
except BaseException, e:
print 'failed ondata,' ,str(e)
time.sleep(5)
def on_error(self, status):
print status
试试这个:
import os
import time
from datetime import datetime
from threading import Timer
def exitfunc():
print "Exit Time", datetime.now()
os._exit(0)
Timer(5, exitfunc).start() # exit in 5 seconds
while True: # infinite loop, replace it with your code that you want to interrupt
print "Current Time", datetime.now()
time.sleep(1)
这个问题还有一些例子:
我认为不鼓励使用
os.\u exit(0)
,但我不确定。这件事让人觉得不洁。不过,它可以工作。使用信号。报警
在指定时间后收到通知
import signal, os
def handler(signum, frame):
print '60 seconds passed, exiting'
cleanup_and_exit_your_code()
# Set the signal handler and a 60-second alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(60)
run_your_code()
从您的示例来看,代码的具体功能、运行方式以及迭代的循环类型并不明显。但您可以轻松实现
报警
信号,以便在超时过期后收到通知。您可以将代码移动到守护进程线程中,并在60秒后退出主线程:
#!/usr/bin/env python
import time
import threading
def listen():
print("put your code here")
t = threading.Thread(target=listen)
t.daemon = True
t.start()
time.sleep(60)
# main thread exits here. Daemon threads do not survive.
import time
import os
i = 0
def executeSomething():
global i
print(i)
i += 1
time.sleep(1)
if i == 10:
print('End')
os._exit(0)
while True:
executeSomething()
这是我最喜欢的超时方式
def timeout(func, args=None, kwargs=None, TIMEOUT=10, default=None, err=.05):
if args is None:
args = []
elif hasattr(args, "__iter__") and not isinstance(args, basestring):
args = args
else:
args = [args]
kwargs = {} if kwargs is None else kwargs
import threading
class InterruptableThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.result = None
def run(self):
try:
self.result = func(*args, **kwargs)
except:
self.result = default
it = InterruptableThread()
it.start()
it.join(TIMEOUT* (1 + err))
if it.isAlive():
return default
else:
return it.result
我希望这是一种定期执行函数并在60秒后结束的简单方法:
#!/usr/bin/env python
import time
import threading
def listen():
print("put your code here")
t = threading.Thread(target=listen)
t.daemon = True
t.start()
time.sleep(60)
# main thread exits here. Daemon threads do not survive.
import time
import os
i = 0
def executeSomething():
global i
print(i)
i += 1
time.sleep(1)
if i == 10:
print('End')
os._exit(0)
while True:
executeSomething()
记住开始的时间,在数据上的
中查询时间,如果一分钟过去了就退出?开始处的“导入时间”是否在记忆时间?我也找不到查询时间的代码…这只是一个类定义。它不会“从命令行运行”。你的意思是从python解释器中捕获吗?不要捕获BaseException
,除非稍后重新激活它。为什么要忽略SystemExit
或KeyboardInterrupt
?基本上,我希望代码每小时运行一分钟,我想我应该先在60秒后在cancel中编写代码,然后使用命令行查看,这样代码每小时运行一次。这不正确吗?插入上述代码后,代码将正常运行,但结束函数不会结束。请立即尝试,os.\u exit(0)
按您希望的方式退出。运行5秒钟后,我们就到了那里,:DNo现在只是重复打印日期,没有出现任何问题。@user3102640:os.\u exit()
是一个核选项,但它可以工作。另请参见我收到此错误消息ondata失败,'module'对象没有属性'SIGALRM'
@user:信号。SIGALRM
在某些平台(例如Windows)上不起作用。ondata失败,未定义全局名称'listen'
是错误消息I吗get@user3102640:我已经更新了代码。如果有什么不清楚的地方,请告诉我。我经常在这里遇到语法错误:`print(“把代码放在这里”)`@J.FSebastian@user3102640:代码在Python 2和Python 3上的工作方式相同。确保复制粘贴过程没有将Unicode空格添加到代码中(只需在打印之前删除空格,然后手动键入4个空格)。这非常简洁,@J.F.Sebastian。这是对此处代码的修改。实际上,您不会中断func(*args,**kwargs)
调用。无论超时是否发生,它都将继续运行。此外,错误命名的“InterruptableThread”不是守护进程。如果func()
仍在运行,它将阻止程序退出。@J.F.Sebastian您如何使用守护进程
使func()
超时?换言之,您能否修改您的答案,以便if可以采用我的答案尝试使用的函数和参数?@J.F.Sebastian如何使用该语法将结果输出?我还没有弄明白。@J.F.Sebastian基本上,我仍然在寻找一个有效的答案来回答我提出的这个问题,这个答案将包含daemon