【问题标题】:How to write logic for conditions occurring for x amount of time如何为发生 x 时间的条件编写逻辑
【发布时间】:2018-04-16 17:08:19
【问题描述】:

我正在尝试弄清楚如何执行以下操作:

如果“某些逻辑”出现超过 15 秒: “执行一些代码”

我不太清楚如何让 python 来做这件事。我正在处理股票价格,我的索引列是 dtype='datetime64[ns]。

我尝试在其他线程中搜索有关如何执行此操作的提示,但我什至不太确定要搜索什么。

如果这是一个非常基本的问题,请提前道歉。

【问题讨论】:

  • 对我来说,这是一个非常不清楚的问题。

标签: python python-2.7 datetime


【解决方案1】:

尝试获取当前时间并在每个滴答声中进行比较

【讨论】:

    【解决方案2】:

    实现此目的的一种方法是使用线程(多处理),因为它们将是 2 个任务“一些逻辑”和“调度程序”。

    这可以通过以下逻辑轻松解决:

    import threading
    import time
    
    lock = threading.Lock()
    cond = threading.Condition(threading.Lock())
    
    def waitLock(timeout):
        with cond:
            current_time = start_time = time.time()
            while current_time < start_time + timeout:
                if lock.acquire(False):
                    return True
                else:
                    cond.wait(timeout - current_time + start_time)
                    current_time = time.time()
        return False
    

    来源:How to implement a Lock with a timeout in Python 2.7

    【讨论】:

      【解决方案3】:
      import time
      
      def check():
          if not some_logic(): return False
      
          start_time = time.time()
          while time.time() - start_time <= 15:
              if not some_logic(): return False
      
          return True
      
      if check():
          ... # do stuff
      

      这会尽可能多地运行some_logic,以确保它在整个 15 秒期间始终返回True

      【讨论】:

      • 我认为这行得通!谢谢你!如果我再次遇到障碍,我会再次回复。
      • 我似乎遇到的问题是我的程序像循环一样遍历每一行价格数据.如何使每次脚本运行新行时开始时间保持不变?
      • @Sagittar1us19,先设置start_time = time.time()再循环?或者使用多线程:一个线程进行检查,另一个处理数据。这真的取决于你的代码做什么。
      • 我使用的交易环境叫backtrader。在制定交易策略时,您采用一种逐行遍历每一行数据的方法。每次程序进入新行时,都会将该行变为 [0]。因此,策略可以知道条件是否为真的唯一方法是不幸地遍历循环。
      • 我将尝试将条件为真的时间存储到一个列表中,然后继续检查当前时间是否 - 列表中的 [0] 值小于 5 。然后在我利用开始时间后清除列表。希望这会奏效
      猜你喜欢
      • 1970-01-01
      • 2016-11-02
      • 2019-04-13
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      相关资源
      最近更新 更多