簡體   English   中英

一種非阻塞的扭曲睡眠/等待方式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM