[英]A non blocking way to sleep/wait in twisted?
有沒有一種非阻塞方式可以在扭曲狀態下等待或返回該功能?
我有一個循環行情自動收錄器,它僅設置為按設定的時間間隔進行tick
,並且一切正常。 但是,停止它時,我想確保它當前不在Tick
進行任何工作。 如果是的話,我只想扭曲回到那兒,然后殺死它。
def stop(self):
import time
while self.in_tick:
time.sleep(.001) # Blocking
self.active = False
self.reset()
self.timer.stop()
有時,當另一個線程正在運行Tick
操作時,會調用上面的函數,而我想完成Tick
,然后返回並停止它。
我不想阻止此操作過程中無論如何循環。 我該怎么辦?
做一個time.sleep()看起來有點奇怪,而不是僅僅等待一個事件來發信號並觸發一個延遲來做你想做的事情。 對於線程,您可能會喚醒該線程,請檢查“ self.in_tick == False”,然后在達到“ self.active = False”之前,另一個線程會啟動新的滴答,因此這可能具有競爭條件,並且可能無法正常工作無論如何你都期望。 因此,希望您可以在其他地方進行一些其他線程同步以使其工作。
您可以嘗試將代碼分成兩個功能,如果沒有完成,可以安排一個功能自行計划。
def stop(self):
# avoid reentracy
if not self._stop_call_running:
self._stop()
def _stop(self):
if self.in_tick:
# reschedule itself
self._stop_call_running = reactor.callLater(0.001, self._stop)
return
self.active = False
self.reset()
self.timer.stop()
self._stop_call_running = None
您可能還會看twisted.internet.task.LoopingCall
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.