首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中让函数在5秒后返回?

如何在Python中让函数在5秒后返回?
EN

Stack Overflow用户
提问于 2012-08-31 22:06:25
回答 4查看 14.3K关注 0票数 7

我想写一个函数,它会在5秒后返回:

代码语言:javascript
复制
def myfunction():
    while passed_time < 5_seconds:
        do1()
        do2()
        do3()
        .
        .
    return

我的意思是,这个函数只运行5秒,5秒后,它应该结束,并继续其他函数:

代码语言:javascript
复制
myfunction()
otherfunction()   ----> This should start 5 seconds after myfunction() is executed.

诚挚的问候

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-31 22:10:05

您可以执行以下操作:

代码语言:javascript
复制
def myfunction():
    start = time.time()
    while time.time() < start + 5:
        do1()
        do2()
        do3()

请注意,这将在至少5秒后停止-如果do1do2do3分别需要3秒,则此函数将需要9秒。

如果你想切断这些调用之间的myFunction,你可以这样做:

代码语言:javascript
复制
def myfunction():
    todo = itertools.cycle([do1, do2, do3])
    start = time.time()
    while time.time() < start + 5:
        todo.next()()

这种情况下需要6秒

票数 5
EN

Stack Overflow用户

发布于 2012-08-31 22:22:03

如果您的函数的执行时间可能长于触发这些函数之间的间隔,则必须在另一个线程或进程中启动这些函数。

使用threading的示例

代码语言:javascript
复制
import time
import sys
from threading import Thread


def f1():
    print "yo!!"
    time.sleep(6)


def f2():
    print "boring."
    time.sleep(2)


if __name__ == "__main__":
    threads = []
    try:
        for f in [f1, f2]:
            t = Thread(target=f)
            t.start()
            threads.append(t)
            time.sleep(5)
    except KeyboardInterrupt:
        sys.exit(0)
    finally:
        [t.join() for t in threads]

我理解这个问题的方式是,你不一定需要在恰好5秒后终止/结束一个函数。您的主要目标是以5秒的间隔启动函数。如果你需要在一段时间后‘杀死’这些函数,这不是使用线程的小事情:Is there any way to kill a Thread in Python?

票数 3
EN

Stack Overflow用户

发布于 2012-09-01 04:42:21

您还可以执行以下操作:

代码语言:javascript
复制
import time 
start=time.time()   

stuff={1:do1,2:do2,3:do3,...}
i=1

while time.time() <= start+5:
    stuff[i]()
    i+=1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12217027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档