【问题标题】:Break while loop after x amount of time but continue for loop at the same level在 x 时间后中断 while 循环,但在同一级别继续 for 循环
【发布时间】:2021-06-24 13:51:16
【问题描述】:

目前我正在使用一些 api,我必须在其中更新或删除数据。 为了验证自己,我必须使用一些令牌,它们的有效期为 10 分钟。

我的任务需要超过 10 分钟,所以我无法正常完成我的程序。

我对这个问题的解决方案是跟踪时间,在 9 分钟后,我想请求新令牌并继续在我的 for 循环中停止的地方继续。

import time

end_time = time.time() + 60*9
while time.time() < end_time:
    for repetition in range(0, 4):
        sw_patcher_ghp = Shopware()
        bearer_token_ghp = sw_patcher_ghp.get_access_token()
        continue
        ##compare both files if skus are matching, grab the data which is needed for patching ruleIds
        for i in range(0, len(all_json)):
            for ii in range(0, len(all_csv)):
                if all_json[i][0] == all_csv[ii][0]:
                    print(sw_patcher_ghp.patch_ruleid(bearer_token_ghp, all_json[i][1], all_csv[ii][1], true_boolean), 'GHP', all_json[i][1])

现在最大的问题是: 如何请求新令牌,但我还必须能够在我离开的地方继续 for 循环

例如,当我在 i = 500 离开时,我想在 501 收到新令牌后开始

【问题讨论】:

  • 为什么不在每次调用patch_ruleid() 之前检查经过的时间,并在需要时获取一个新的bearer_token_ghp
  • 您可以在嵌套循环中更新令牌
  • @quamrana 我想我知道你想指出什么,但我也是在同一点上,还是?可能我误会了你
  • @FilipMłynarski 是的,我知道,但我不想在完成的每个循环中更新令牌,因为我很穷,网络服务器也是如此

标签: python python-3.x for-loop while-loop shopware


【解决方案1】:

你真的不需要while 循环。如果 9 分钟过去了,只需在最里面的循环中请求一个新令牌并更新 end_time

for repetition in range(0, 4):
    sw_patcher_ghp = Shopware()
    bearer_token_ghp = sw_patcher_ghp.get_access_token()
    
    for i in range(0, len(all_json)):
        for ii in range(0, len(all_csv)):
            if all_json[i][0] == all_csv[ii][0]:
                if end_time >= time.time():
                    #enter code here get new token
                    end_time = time.time()+60*9
                else:
                    print(sw_patcher_ghp.patch_ruleid(bearer_token_ghp, all_json[i][1], all_csv[ii][1], true_boolean), 'GHP', all_json[i][1])

【讨论】:

  • 我只是玩过 while 循环,以前从未使用过。也许我太专注于使用 while 循环,以至于我什至没有考虑其他方法来实现这一点..跨度>
  • 在玩了一会儿并将if end_time &gt;= time.time() 更改为```if time_now - start_time >= 480(秒值)之后,它起作用了:) 你的建议在某种程度上帮助了我的类对象的外包,谢谢劳德! :)
【解决方案2】:

好的,所以我认为您的意思是任何时候都可以获取新令牌,但您想每 9 分钟尝试一次:

import time

end_time = time.time() - 1  # force end_time to be invalid at the start
for repetition in range(0, 4):
    ##compare both files if skus are matching, grab the data which is needed for patching ruleIds
    for i in range(0, len(all_json)):
        for ii in range(0, len(all_csv)):
            if all_json[i][0] == all_csv[ii][0]:
                if time.time() > end_time:
                    end_time = time.time() + 60*9
                    sw_patcher_ghp = Shopware()
                    bearer_token_ghp = sw_patcher_ghp.get_access_token()

                print(sw_patcher_ghp.patch_ruleid(bearer_token_ghp, all_json[i][1], all_csv[ii][1], true_boolean), 'GHP', all_json[i][1])

【讨论】:

  • 没错!如果我在 6 分钟后获得新令牌或类似的东西,这不是很重要。我只是想确定,我不会太接近 10 分钟,但我也不想每秒请求一个新令牌。谢谢你的建议,我现在就挂机
  • 这个建议对我不起作用:/。程序在几秒钟后完成
  • 不应该是if time.time() &gt; end_time吗?
  • 糟糕。大概吧。我会更新的。这是我最常犯的错误:得到一个与我的意思相反的逻辑陈述。
猜你喜欢
  • 1970-01-01
  • 2017-08-12
  • 1970-01-01
  • 2015-05-27
  • 2020-06-09
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 2014-03-22
相关资源
最近更新 更多