一个任务会在不同的执行时间从 web 表单抛出到服务器。
但问题是,在第一个任务开始时,第二个任务没有开始。
代码示例(字典 d 作为示例输入给出):
def test_run_func_schedule(data):
print('test_run_func_schedule:',data)
def test_send_func_schedule(data):
d= {'vm1': 2, 'vm2': 4, 'vm3': 8}
for k,v in d.items():
schedule.every(v).seconds.do(lambda: test_run_func_schedule(k)).tag('second-tasks', 'VM_'+k)
while 1:
schedule.run_pending()
time.sleep(1)
只有 vm1 输出到控制台。其余不显示。如何使其余的任务也被执行?
循环
while不能在循环内for。首先,这个循环必须完成到最后for,在这个循环中任务被添加给你,然后一个无限循环的事件处理就会开始。现在你只添加了一个任务,然后无限循环立即开始,剩下的任务没有添加(很明显,因为无限循环永远不会结束)。此外,lambda
k从全局变量k(最后一个值)获取其值,而不是创建 lambda 时的值。有必要通过默认参数值:
或使用
functools.partial(“将函数部分应用到参数”,实际上是创建一个新函数,在调用时预填充传递函数的一些参数):这是它应该如何工作:
简而言之,我明白了。使用的 apscheduler