- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含触发器的类
,我想在作业命中适当的时候更新这些触发器。
我的类(class):
class SetTrigger(object):
def __init__(self):
self.set_work = False
self.set_reload = False
self.set_refresh = False
def UpdateSetRefresh(self):
self.set_refresh = True
return self.set_refresh
def UpdateSetWork(self):
self.set_work = True
return self.set_work
def UpdateSetReload(self):
self.set_reload = True
return self.set_reload
如果我将变量设置为从函数中获取值,如下所示,我会收到一个错误。
trigger = SetTrigger()
set_refresh = trigger.UpdateSetRefresh()
错误:
func must be a callable or a textual reference to one
我已经尝试调用 trigger.UpdateSetRefresh
,但变量 set_refresh
没有更改为 True
。如果我调用 trigger.UpdateSetRefresh()
,它会给出与上面相同的错误。
如何在 APScheduler 作业中调用类 SetTrigger
中的函数 UpdateSetRefresh
,如下所示?
我试过:
scheduler.add_job(trigger.UpdateSetRefresh, 'interval', seconds=20, id='1', name='refresh_hereoes_positions', misfire_grace_time=180)
[编辑]
trigger.UpdateSetRefresh
未按我的需要返回 True
的示例:
import tzlocal
import time
import os
from bot import SetTrigger
from apscheduler.schedulers.asyncio import AsyncIOScheduler
trigger = SetTrigger()
scheduler = AsyncIOScheduler(timezone=str(tzlocal.get_localzone()))
scheduler.add_job(trigger.UpdateSetRefresh, 'interval', seconds=3)
scheduler.start()
print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))
try:
# This is here to simulate application activity (which keeps the main thread alive).
while True:
time.sleep(2)
print(trigger.set_refresh)
except (KeyboardInterrupt, SystemExit):
# Not strictly necessary if daemonic mode is enabled but should be done if possible
scheduler.shutdown()
输出:
Press Ctrl+Break to exit
False
False
False
最佳答案
您必须将函数传递给 add_job
但您传递的不是它而是 trigger.UpdateSetRefresh
的返回值。
所以正确的陈述应该是这样的:
scheduler.add_job(trigger.UpdateSetRefresh, 'interval', seconds=2, id='1', name='refresh_hereoes_positions')
代替
scheduler.add_job(trigger.UpdateSetRefresh(), 'interval', seconds=2, id='1', name='refresh_hereoes_positions')
当你在函数名末尾添加括号时,python 将执行它并将返回值传递给 add_job
函数。
有关将函数作为参数传递的更多信息,请查看此 link .
[编辑]
如果您使用的是 AsyncIOScheduler你应该做这样的事情
import tzlocal
import os
from bot import SetTrigger
from apscheduler.schedulers.asyncio import AsyncIOScheduler
import asyncio
def DisplayValue(trigger):
print(trigger.UpdateSetWork())
trigger = SetTrigger()
scheduler = AsyncIOScheduler(timezone=str(tzlocal.get_localzone()))
scheduler.add_job(trigger.UpdateSetRefresh, 'interval', seconds=3)
scheduler.start()
print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))
try:
loop = asyncio.get_event_loop()
loop.call_at(10, displayValue, trigger)
loop.run_forever()
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown()
或者你可以像那样使用后台调度程序
from apscheduler.schedulers.background import BackgroundScheduler
from bot import SetTrigger
import tzlocal
import time
trigger = SetTrigger()
scheduler = BackgroundScheduler()
scheduler.configure(timezone=str(tzlocal.get_localzone()))
scheduler.add_job(trigger.UpdateSetRefresh, 'interval', seconds=2, id='1', name='refresh_hereoes_positions')
scheduler.start()
while True:
print(trigger.set_refresh)
time.sleep(2)
关于python - 如何在 apscheduler 作业中从类中调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70854381/
我有一些经常运行或持续一段时间的重复性工作。 似乎 Scheduler().get_jobs() 只会返回当前未运行的计划作业列表,因此我无法确定具有特定 id 的作业是否不存在或实际正在运行。 在这
我不知道为什么会收到此错误:ImportError: No module named 'apscheduler'。 我尝试安装旧版本:sudo pip uninstall apscheduler 然后
我有一个正在运行的 Django 项目及其数据库和模型表。现在,我想使用 Django 数据库连接集成 APScheduler 并将 APScheduler 作业保存在与其他表相同的数据库中。 我已阅
我是 APScheduler 的新手,并在在更大范围内实现之前对其进行了测试。 我已经创建了下面的代码,但是当我将 add_job 与 trigger='date' 一起使用时,我的函数从未被调用过。
我有一个使用 uwsgi(有 10 个 worker )+ ngnix 运行的 django 应用程序。我正在使用 apscheduler 进行调度。每当我安排一项工作时,它都会被多次执行。从这些答案
调度程序在生产中运行良好,然后突然关闭。显然,DB 可能已经离线了一段时间(网络应用程序从未错过任何一个节拍,因此它是短暂的)。 日志报告... [2019-11-25 07:59:14,907: I
我正在使用 APScheduler(3.5.3) 来运行三个不同的作业。我需要在完成第一份工作后立即触发第二份工作。另外我不知道第一份工作的完成时间。我将触发器类型设置为 cron 并计划每 2 小时
我们正在运行 Azure Kubernetes 集群(DEV、TST、PRD 上每个阶段一个),我们需要定期运行多个 Python 脚本,这就是我们使用 APScheduler (3.6.0) 的目的
目前,我正在使用 APScheduler 每 10 分钟自动执行一次脚本。它在 print("[+] Success! Bot Starting!") 之后停止执行,它不会输出错误。我建议我的 Sch
我在程序中使用 APScheduler 在特定日期时间安排作业。但是,我正在处理与本地时间不同时区的日期时间。所以我传递给 APScheduler 的日期时间始终是一个时区感知的日期时间... sch
我们需要在当前作业执行时动态调度多个作业。 大概的场景是: 应该有一个调度程序来每天检查应用程序表(假设在世界标准时间上午 6 点)。查找今天的日期时间为resume_dttime的用户为该用户动态安
我尝试了APS的MongoJobStore example。示例代码为: import logging import os import sys from datetime import dateti
我在脚本中使用模块APScheduler,我使用BlockingScheduler。我有一些定期的工作。如果此作业引发一个异常,无论我在try中期望它还是让它传播,我的线程都会这样做不返回。然后我达到
我希望每天早上 6 点启动我的主要任务。但出于测试目的,我将间隔设置为 5 秒。问题是它似乎永远不会开火。我在 maintask 方法中有一个从未到达的断点,并且没有任何内容打印到控制台。我假设它没有
我通过 apscheduler 安排了作业。到目前为止,我有 3 份工作,但很快就会有更多。我正在寻找一种方法来扩展我的代码。 目前,每个作业都是它自己的.py文件,在该文件中,我将脚本变成了一个以r
我在 django 中运行了 apscheduler,它似乎可以正常工作……好吧。在我的项目 init.py 中,我初始化了调度程序: scheduler = Scheduler(daemon=Tru
我正在尝试为 Github 上的一个项目做出贡献,以收集财务信息 数据。 代码.. # time_keeper.py from apscheduler.scheduler import
[Python 3.5.2, APScheduler 3.3.1] APScheduler 启动了一些线程,我想知道为什么。 这是我正在执行的代码(在 PyCharm 中,我还可以在其中绘制线程图):
我当前正在尝试设置调度程序(使用 apscheduler),但在添加作业时失败: from apscheduler.schedulers.blocking import BlockingSchedul
我正在 redis 中添加作业,完成作业后我添加了一个事件处理程序。在事件处理程序中,我返回值,根据该值我从作业库中删除作业 ID。它被成功删除,但立即抛出异常。 代码 from datetime i
我是一名优秀的程序员,十分优秀!