【问题标题】:Change the Scheduling Time - Python更改调度时间 - Python
【发布时间】:2021-01-23 13:18:31
【问题描述】:

我正在使用调度模块来自动运行一个函数...

我正在考虑动态更改调度时间,但解决方法不成功

代码-

import schedule
import pandas
from time import gmtime, strftime, sleep
import time
import random

time = 0.1
def a():
    global time
    print(strftime("%Y-%m-%d %H:%M:%S", gmtime()))
    index = random.randint(1, 9)
    print(index, time)
    if(index==2):
        time = 1

print(strftime("%Y-%m-%d %H:%M:%S", gmtime()))
schedule.every(time).minutes.do(a) #specify the minutes to automatically run the api

while True:
    schedule.run_pending()

在这个程序中,我安排程序每 6 秒运行一次。如果随机整数 - index 值变为 2,则将 time 变量分配为 1(1 分钟)。我查了一下,随机整数index变为2后,time变量变为1。问题-将time变量变为1后,调度仍然每6秒而不是1分钟运行函数a() .

如何动态改变调度时间?

谢谢

【问题讨论】:

    标签: python python-3.x scheduled-tasks scheduler


    【解决方案1】:

    将时间变量改为1后,调度仍然是每6秒而不是1分钟运行一次函数a()。

    这是因为 schedule.every(time).minutes.do(a) # specify the minutes to automatically run the api 在开始时将 time 设置为 6 秒,即使您更改该变量的值也不会改变,因为该行只执行了一次 time 在执行时是 6 秒

    如何动态改变调度时间?

    阅读DOCUMENTATION 后,我没有发现任何(我认为)关于手动更改时间满足某些条件时),但它已内置Random Interval 函数,该函数本身指定随机时间within the range

    在你的情况下,你可以这样做:

    schedule.every(5).to(10).seconds.do(a)

    问题是当某些条件满足时,您无法更改时间

    也许有一些方法可以解决这个问题,但无法解决。这些信息可能有助于进一步调查以解决您的问题。

    【讨论】:

      【解决方案2】:

      我通常使用自定义调度程序,因为它们允许更好的控制并且内存占用更少。变量“时间”需要在进程之间共享。这就是 Manager().Namespace() 来拯救的地方。它在“进程之间”进行对话。

      import time
      import random
      from multiprocessing import Process, Manager
      
      ns = Manager().Namespace()
      ns.time = 0.1
      processes = []
      
      def a():
          print(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))
          index = random.randint(1, 4)
          if(index==2):
              ns.time = 1
          print(index, ns.time)
      
      while True:
          try:
              s = time.time() + ns.time*60
              for x in processes:
                  if not x.is_alive():
                      x.join()
                      processes.remove(x)
              print('Sleeping :',round(s - time.time()))
              time.sleep(round(s - time.time()))
              p = Process(target = a)
              p.start()
              processes.append(p)
          except:
              print('Killing all to prevent orphaning ...')
              [p.terminate() for p in processes]
              [processes.remove(p) for p in processes]
              break
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-03
        相关资源
        最近更新 更多