【问题标题】:How to run a code after 10 seconds for a single time in python?如何在 10 秒后在 python 中运行一次代码?
【发布时间】:2018-02-04 23:28:37
【问题描述】:

我看过一些关于每 10 秒运行一次代码的多线程帖子,但是如何在 x 秒后只运行一次代码?

具体来说,我正在尝试创建一个类方法,它执行一些代码并在 10 秒后调用另一个方法,但同时仍允许调用其他方法。

【问题讨论】:

    标签: python multithreading algorithm oop time


    【解决方案1】:

    我建议使用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()
    

    【讨论】:

    • 感谢您的回答!程序到底是如何停止的?
    • @PBuddy:你可以使用Timer.cancel
    【解决方案2】:

    在 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(取决于您使用的操作系统),除非您有充分的理由这样做,否则我不会走这条路。

    【讨论】:

      【解决方案3】:

      实现@timeout 装饰器并放在你要设置的函数之前。

      在类 Unix 操作系统上使用 signal,请参阅 timeout_decorator。由于Windows没有在系统层面实现信号,所以你必须使用InterruptableThread

      【讨论】:

      • 感谢您的回答!究竟什么是信号?
      • @PBuddy "信号是发送到进程或同一进程中的特定线程的异步通知,以通知它发生的事件。" - en.wikipedia.org/wiki/Signal_(IPC)
      猜你喜欢
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 2019-07-31
      • 1970-01-01
      相关资源
      最近更新 更多