未找到名为 "interval" 的触发器
No trigger by the name "interval" was found
我一直在使用 APScheduler,在尝试 运行 代码时出现错误 "No trigger by the name 'interval' was found"
它在我的本地机器上完美无缺,但可以在我的云机器上运行。
我已经尝试过:通过 pip、easy_install 和手动重新安装 apscheduler;升级设置工具;升级所有依赖项。
编辑:代码
if __name__ == '__main__':
scheduler = BlockingScheduler()
scheduler.add_job(SMS, 'interval', minutes=1)
scheduler.start()
print Run Complete
try:
# This is here to simulate application activity (which keeps the main thread alive).
while True:
time.sleep(2)
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown() # Not strictly necessary if daemonic mode is enabled but should be done if possible
LookupError Traceback (most recent call last)
<ipython-input-40-2895cd586d3f> in <module>()
1 if __name__ == '__main__':
2 scheduler = BlockingScheduler()
----> 3 scheduler.add_job(SMS, 'interval', hours=1)
4 scheduler.start()
5 print "Run Complete"
/Users/admin/anaconda/lib/python2.7/site-packages/apscheduler/schedulers/base.pyc in add_job(self, func, trigger, args, kwargs, id, name, misfire_grace_time, coalesce, max_instances, next_run_time, jobstore, executor, replace_existing, **trigger_args)
328
329 job_kwargs = {
--> 330 'trigger': self._create_trigger(trigger, trigger_args),
331 'executor': executor,
332 'func': func,
/Users/admin/anaconda/lib/python2.7/site-packages/apscheduler/schedulers/base.pyc in _create_trigger(self, trigger, trigger_args)
780
781 # Instantiate the trigger class
--> 782 return self._create_plugin_instance('trigger', trigger, trigger_args)
783
784 def _create_lock(self):
/Users/admin/anaconda/lib/python2.7/site-packages/apscheduler/schedulers/base.pyc in _create_plugin_instance(self, type_, alias, constructor_kwargs)
764 raise TypeError('The {0} entry point does not point to a {0} class'.format(type_))
765 else:
--> 766 raise LookupError('No {0} by the name "{1}" was found'.format(type_, alias))
767
768 return plugin_cls(**constructor_kwargs)
LookupError: No trigger by the name "interval" was found
我在 ipython 的另一台服务器上工作。我尝试了 uninstalling/upgrading setuptools 和 APScheduler。然后,我将已经拥有的完全相同的代码复制并粘贴到我在第二台服务器上创建的新笔记本中。
它奏效了。
如果你像我一样使用 virtualenv 1.11.6,升级到 12.0.7 应该可以解决这个问题。根据这个帖子 https://bitbucket.org/agronholm/apscheduler/issue/77/lookuperror-no-trigger-by-the-name 你可能也需要升级你的设置工具。
此问题是由旧版本的设置工具引起的。参见 https://bitbucket.org/agronholm/apscheduler/issues/77/lookuperror-no-trigger-by-the-name
您可以通过 运行 sudo pip install --upgrade setuptools
并使用 sudo pip install --ignore-installed apscheduler
重新安装 apscheduler 来解决这个问题
我遇到了 PyInstaller
和 cx_Freeze
以及 Flask
冻结环境的问题,尽管虚拟环境没有问题。我的配置和代码如下,
Python 3.6.7 64bit
APScheduler 3.5.3
Flask-APScheduler 1.11.0
Flask 1.0.2
dash 0.32.2
cx-Freeze 5.1.1
PyInstaller 3.4
# The code produces the error
scheduler = APScheduler()
@scheduler.task('interval', id='do_job_1', seconds=30, misfire_grace_time=900)
def job1():
print('Job 1 executed')
修改如下代码后,问题消失,
from apscheduler.triggers.interval import IntervalTrigger
scheduler = APScheduler()
@scheduler.task(IntervalTrigger(seconds=30), id='do_job_1', misfire_grace_time=900)
def job1():
server.logger.info('Job 1 executed')
其他答案指向环境原因,但这也可能与您使用 APScheudler 的方式有关。
- 如果使用 PyInstaller,请参阅此
否则,验证 APScheduler class (scheduler/trigger/jobstore/job) 是否正确实例化
- 如果是这种情况,
LookupError
可能会在 BaseScheduler
尝试访问调度程序的触发器、作业存储和执行程序时被抛出。从版本 3.6.3 开始,它位于 base.py 的 _create_plugin_instance()
方法中
确认您的文件未使用与 APScheduler 库相同的名称也很好
我有一个非常相似的问题。
我的代码不工作:
from apscheduler.schedulers.background import BackgroundScheduler
def job1():
print("Job 1 fired")
scheduler = BackgroundScheduler()
scheduler.add_job(job1, 'interval', seconds=2, id="job1")
scheduler.start()
我是这样修复的:
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.interval import IntervalTrigger
def job1():
print("Job 1 fired")
scheduler = BackgroundScheduler()
scheduler.add_job(job1, IntervalTrigger(), seconds=2, id="job1")
scheduler.start()
我不知道是什么导致了这个问题。
我一直在使用 APScheduler,在尝试 运行 代码时出现错误 "No trigger by the name 'interval' was found"
它在我的本地机器上完美无缺,但可以在我的云机器上运行。
我已经尝试过:通过 pip、easy_install 和手动重新安装 apscheduler;升级设置工具;升级所有依赖项。
编辑:代码
if __name__ == '__main__':
scheduler = BlockingScheduler()
scheduler.add_job(SMS, 'interval', minutes=1)
scheduler.start()
print Run Complete
try:
# This is here to simulate application activity (which keeps the main thread alive).
while True:
time.sleep(2)
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown() # Not strictly necessary if daemonic mode is enabled but should be done if possible
LookupError Traceback (most recent call last)
<ipython-input-40-2895cd586d3f> in <module>()
1 if __name__ == '__main__':
2 scheduler = BlockingScheduler()
----> 3 scheduler.add_job(SMS, 'interval', hours=1)
4 scheduler.start()
5 print "Run Complete"
/Users/admin/anaconda/lib/python2.7/site-packages/apscheduler/schedulers/base.pyc in add_job(self, func, trigger, args, kwargs, id, name, misfire_grace_time, coalesce, max_instances, next_run_time, jobstore, executor, replace_existing, **trigger_args)
328
329 job_kwargs = {
--> 330 'trigger': self._create_trigger(trigger, trigger_args),
331 'executor': executor,
332 'func': func,
/Users/admin/anaconda/lib/python2.7/site-packages/apscheduler/schedulers/base.pyc in _create_trigger(self, trigger, trigger_args)
780
781 # Instantiate the trigger class
--> 782 return self._create_plugin_instance('trigger', trigger, trigger_args)
783
784 def _create_lock(self):
/Users/admin/anaconda/lib/python2.7/site-packages/apscheduler/schedulers/base.pyc in _create_plugin_instance(self, type_, alias, constructor_kwargs)
764 raise TypeError('The {0} entry point does not point to a {0} class'.format(type_))
765 else:
--> 766 raise LookupError('No {0} by the name "{1}" was found'.format(type_, alias))
767
768 return plugin_cls(**constructor_kwargs)
LookupError: No trigger by the name "interval" was found
我在 ipython 的另一台服务器上工作。我尝试了 uninstalling/upgrading setuptools 和 APScheduler。然后,我将已经拥有的完全相同的代码复制并粘贴到我在第二台服务器上创建的新笔记本中。
它奏效了。
如果你像我一样使用 virtualenv 1.11.6,升级到 12.0.7 应该可以解决这个问题。根据这个帖子 https://bitbucket.org/agronholm/apscheduler/issue/77/lookuperror-no-trigger-by-the-name 你可能也需要升级你的设置工具。
此问题是由旧版本的设置工具引起的。参见 https://bitbucket.org/agronholm/apscheduler/issues/77/lookuperror-no-trigger-by-the-name
您可以通过 运行 sudo pip install --upgrade setuptools
并使用 sudo pip install --ignore-installed apscheduler
我遇到了 PyInstaller
和 cx_Freeze
以及 Flask
冻结环境的问题,尽管虚拟环境没有问题。我的配置和代码如下,
Python 3.6.7 64bit
APScheduler 3.5.3
Flask-APScheduler 1.11.0
Flask 1.0.2
dash 0.32.2
cx-Freeze 5.1.1
PyInstaller 3.4
# The code produces the error
scheduler = APScheduler()
@scheduler.task('interval', id='do_job_1', seconds=30, misfire_grace_time=900)
def job1():
print('Job 1 executed')
修改如下代码后,问题消失,
from apscheduler.triggers.interval import IntervalTrigger
scheduler = APScheduler()
@scheduler.task(IntervalTrigger(seconds=30), id='do_job_1', misfire_grace_time=900)
def job1():
server.logger.info('Job 1 executed')
其他答案指向环境原因,但这也可能与您使用 APScheudler 的方式有关。
- 如果使用 PyInstaller,请参阅此
否则,验证 APScheduler class (scheduler/trigger/jobstore/job) 是否正确实例化
- 如果是这种情况,
LookupError
可能会在BaseScheduler
尝试访问调度程序的触发器、作业存储和执行程序时被抛出。从版本 3.6.3 开始,它位于 base.py 的
_create_plugin_instance()
方法中
确认您的文件未使用与 APScheduler 库相同的名称也很好
我有一个非常相似的问题。
我的代码不工作:
from apscheduler.schedulers.background import BackgroundScheduler
def job1():
print("Job 1 fired")
scheduler = BackgroundScheduler()
scheduler.add_job(job1, 'interval', seconds=2, id="job1")
scheduler.start()
我是这样修复的:
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.interval import IntervalTrigger
def job1():
print("Job 1 fired")
scheduler = BackgroundScheduler()
scheduler.add_job(job1, IntervalTrigger(), seconds=2, id="job1")
scheduler.start()
我不知道是什么导致了这个问题。