【问题标题】:python loop to run for a second then wait for 1 minute and do it infinitelypython循环运行一秒钟然后等待1分钟并无限执行
【发布时间】:2022-10-18 00:00:18
【问题描述】:

我每秒钟都在获取一些股票市场数据,只需要打印一次迭代或一秒钟的交易量,然后明确等待 60 秒,然后再执行 无限地。

例如,如果我从上午 9:00 开始,然后使用第一个 tick['exchange_timestamp'] 作为 start_time 我想迭代时间或 python 的 timedelta 包,这样它应该在 1 分钟的间隔后给我来自股票数据的交易量意味着在上午 9:01,然后无限执行。

目前的代码是这样的:

    def ROC(self,df,tick):
        global start_time 
        global timespan
        start_time = tick['exchange_timestamp']
        prev_volume = tick['volume_traded']
        timespan = start_time + timedelta(seconds = int(60))
        for index, row in df.iterrows():
            if start_time < timespan :
                prev_volume = tick['volume_traded']


这应该只运行一次迭代那么它应该等一下并连续执行直到运行时。

请任何人都可以通过随着时间的推移使用一些循环来解决这个问题并帮助我 python的日期时间包。

我正在将此代码作为类中的方法运行,因此尝试使用多线程和多处理,但它并没有以任何方式帮助我,所以请尝试仅使用 python 的 time 和 datetime 包解决此问题。

谢谢。 :)

【问题讨论】:

  • 您对使用 Python 的 time 和 datetime 包做了什么尝试?
  • 您可以使用sleep 函数暂停然后继续docs.python.org/3/library/time.html#time.sleep,也可以将while (1): 写成while True: 更'pythonic
  • 嘿@nicomp这里是我正在尝试使用python的datetime包来解决问题的更新代码,但它按预期工作。如果您对此有任何解决方案,请在此处指定。

标签: python datetime while-loop timer timedelta


【解决方案1】:

我建议使用生成器函数这将实现您自己的自定义迭代逻辑。
下一个示例说明了迭代之间 60 秒延迟的迭代逻辑。
这样,您可以将未来的迭代逻辑添加到同一个生成器,同时保持主循环简单。如下例所示,我添加了循环和全局停止标志作为增强功能。

例子:

import time
import pandas as pd

demo_cnt = 0
data = {
  "tickers" : ['NASDAQ:GOOG','NASDAQ:AMZN','NASDAQ:MSFT','NASDAQ:AAPL', 'NASDAQ:META'],
  "values": [101.07, 112.62, 236.80, 141.62, 131.30]
}

# suggested generator function
def cyclic_dataframe_generator(df: pd.DataFrame):
    index = 0
    global cyclic_gen_stop
    cyclic_gen_stop = False
    while True:
        yield index, df.iloc[[index]]
        time.sleep(60)
        index += 1
        if index > df.shape[0] - 1:
            index = 0
        if cyclic_gen_stop:
            break

#load data into a DataFrame object:
df = pd.DataFrame(data)

# loop with custom iteration logic
for index, df_row in cyclic_dataframe_generator(df):
    print (f'index={index}
{df_row}
')
    demo_cnt += 1
    if demo_cnt >= 10:
        cyclic_gen_stop = True

输出:

index=0
       tickers  values
0  NASDAQ:GOOG  101.07

index=1
       tickers  values
1  NASDAQ:AMZN  112.62

index=2
       tickers  values
2  NASDAQ:MSFT   236.8

index=3
       tickers  values
3  NASDAQ:AAPL  141.62

index=4
       tickers  values
4  NASDAQ:META   131.3

index=0
       tickers  values
0  NASDAQ:GOOG  101.07

index=1
       tickers  values
1  NASDAQ:AMZN  112.62

index=2
       tickers  values
2  NASDAQ:MSFT   236.8

index=3
       tickers  values
3  NASDAQ:AAPL  141.62

index=4
       tickers  values
4  NASDAQ:META   131.3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 2022-01-15
    • 2020-03-31
    • 1970-01-01
    • 2014-10-18
    • 2018-06-21
    • 1970-01-01
    • 2020-06-29
    相关资源
    最近更新 更多