我有一個來自sched模塊的 python 計劃,我想在一個單獨的線程中執行,同時能夠隨時停止它。我看了看,threading module但不知道哪種方法是實現這一點的最佳方法。時間表示例:>>> s.run()onetwothreeend線程中的調度示例:>>> t = threading.Thread(target = s.run)>>> t.start()onetwo>>> print("ok")okthreeend>>>想要的結果:>>> u = stoppable_schedule(s.run)>>> u.start()>>>onetwo>>> u.stop()"schedule stopped"
1 回答

DIEA
TA貢獻1820條經驗 獲得超2個贊
您所描述的是可以異步停止的線程。
如上所述這里,有兩種主要的方法。其中之一是讓線程代碼檢查u.stop()它所做的每個操作的某個事件(在您的示例中由觸發)。
另一種解決方案是強制在某個線程中引發錯誤。這種方法實現起來更簡單,但可能會導致意外行為,并且您的線程代碼越復雜,它就越危險。
import ctypes
ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, 0)
tid要終止的線程在哪里。您可以通過運行(在線程中)來獲取線程 ID:
print self._thread_id
Tomer Filiba的thread2博客文章中有關于此的更多信息。
添加回答
舉報
0/150
提交
取消