我正在使用计划模块自动运行功能...
我正在考虑动态更改计划时间,但解决方案并不成功
代码-
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分钟)。我检查过,time
变量在随机整数index
变为2后更改为1。问题-将time
变量更改为1后,调度仍运行函数{{1 }}每6秒而不是1分钟。
如何动态更改计划时间?
谢谢
答案 0 :(得分:0)
将时间变量更改为1后,调度程序仍每6秒而不是1分钟运行一次a()函数。
这是因为schedule.every(time).minutes.do(a) # specify the minutes to automatically run the api
在开始时将time
设置为 6秒,即使您更改了该变量的值也不会更改,因为该行仅执行了一次在执行该操作时,时间的值为 6秒。
如何动态更改计划时间?
阅读DOCUMENTATION后,我没有发现关于时间的手动更改(我认为)(当某些条件满足时)但它内置了Random Interval函数,该函数本身指定了随机时间within the range
。
您可以这样做:
schedule.every(5).to(10).seconds.do(a)
问题在于,当某些条件满足时,您不能更改时间。
也许可能有一些方法可以解决该问题,但无法解决。这些信息可能有助于进一步调查以解决您的问题。
答案 1 :(得分:0)
我通常使用自定义调度程序,因为它们可以提供更大的控制力,并且占用的内存更少。变量“时间”需要在进程之间共享。这是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