为了账号安全,请及时绑定邮箱和手机立即绑定

推迟python中的函数

推迟python中的函数

子衿沉夜 2019-09-03 19:36:44
在JavaScript中,我习惯于能够调用稍后要执行的函数,就像这样function foo() {    alert('bar');}setTimeout(foo, 1000);这不会阻止其他代码的执行。我不知道如何在Python中实现类似的东西。我可以睡觉import timedef foo():    print('bar')time.sleep(1)foo()但这会阻止其他代码的执行。(实际上在我的情况下阻塞Python本身并不是问题,但我无法对该方法进行单元测试。)我知道线程是为不同步执行而设计的,但我想知道是否更容易,类似setTimeout或setInterval存在。
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

你想要一个模块中的Timer对象threading。


from threading import Timer

from time import sleep


def foo():

    print "timer went off!"

t = Timer(4, foo)

t.start()

for i in range(11):

    print i

    sleep(.5)

如果你想重复一遍,这里有一个简单的解决方案:不使用Timer,只需使用Thread但传递一个函数,有点像这样:


def call_delay(delay, repetitions, func, *args, **kwargs):             

    for i in range(repetitions):    

        sleep(delay)

        func(*args, *kwargs)

这不会做无限循环,因为这可能导致一个不会死的线程和其他不愉快的行为,如果做得不对。更复杂的方法可能会使用Event基于方法的方法,就像这个方法一样。


查看完整回答
反对 回复 2019-09-03
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

像Javascript这样的异步回调setTimeout需要一个事件驱动的架构。


Python的异步框架,如流行的扭曲有CallLater哪些你想要做什么,但它意味着采用在应用程序中的事件驱动架构。


另一种方法是使用线程并在线程中休眠。Python提供了一个计时器,使等待部分变得容易。但是,当您的线程唤醒并且您的函数执行时,它位于一个单独的线程中,并且必须以线程安全的方式执行任何操作。


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 491 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信