【发布时间】:2018-02-04 23:28:37
【问题描述】:
我看过一些关于每 10 秒运行一次代码的多线程帖子,但是如何在 x 秒后只运行一次代码?
具体来说,我正在尝试创建一个类方法,它执行一些代码并在 10 秒后调用另一个方法,但同时仍允许调用其他方法。
【问题讨论】:
标签: python multithreading algorithm oop time
我看过一些关于每 10 秒运行一次代码的多线程帖子,但是如何在 x 秒后只运行一次代码?
具体来说,我正在尝试创建一个类方法,它执行一些代码并在 10 秒后调用另一个方法,但同时仍允许调用其他方法。
【问题讨论】:
标签: python multithreading algorithm oop time
我建议使用Timer
例如:
from threading import Timer
class Test:
def start(self):
Timer(10, self.some_method, ()).start()
def some_method(self):
print "called some_method after 10 seconds"
t = Test()
t.start()
【讨论】:
Timer.cancel
在 C++ 中,我使用 Boost 来完成类似的任务。例如,查看deadline_timer http://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/reference/deadline_timer.html。该页面还有一些示例可以帮助您入门。不幸的是,您需要使用 io_service 来使用deadline_timer。
Python 有一个扭曲的框架来做同样的事情http://twistedmatrix.com/documents/13.1.0/api/twisted.internet.interfaces.IReactorTime.html#callLater
例如,在系统编程世界中,您可以使用 timer_create http://man7.org/linux/man-pages/man2/timer_create.2.html(取决于您使用的操作系统),除非您有充分的理由这样做,否则我不会走这条路。
【讨论】:
实现@timeout 装饰器并放在你要设置的函数之前。
在类 Unix 操作系统上使用 signal,请参阅 timeout_decorator。由于Windows没有在系统层面实现信号,所以你必须使用InterruptableThread。
【讨论】: