60秒后结束python代码

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)

下面是一些功能完整的代码

我计划通过命令行执行这段代码,但是我希望它在60秒后结束

有人知道最好的方法吗

提前谢谢

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