python可停止调度在单独的线程中

我有一个来自sched模块的 python 计划,我想在一个单独的线程中执行,同时能够随时停止它。我看了看,threading module但不知道哪种方法是实现这一点的最佳方法。


时间表示例:


>>> s.run()

one

two

three

end

线程中的调度示例:


>>> t = threading.Thread(target = s.run)

>>> t.start()

one

two

>>> print("ok")

ok

three

end

>>>

想要的结果:


>>> u = stoppable_schedule(s.run)

>>> u.start()

>>>

one

two

>>> u.stop()

"schedule stopped"


九州编程
浏览 153回答 1
1回答

DIEA

您所描述的是可以异步停止的线程。如上所述这里,有两种主要的方法。其中之一是让线程代码检查u.stop()它所做的每个操作的某个事件(在您的示例中由触发)。另一种解决方案是强制在某个线程中引发错误。这种方法实现起来更简单,但可能会导致意外行为,并且您的线程代码越复杂,它就越危险。import ctypesctypes.pythonapi.PyThreadState_SetAsyncExc(tid, 0)tid要终止的线程在哪里。您可以通过运行(在线程中)来获取线程 ID:print self._thread_idTomer Filiba的thread2博客文章中有关于此的更多信息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python