问题
I've been working with APScheduler and when attempting to run the code I get the error "No trigger by the name 'interval' was found"
It was perfectly on my local machine but will work on my cloud machine.
I have tried: reinstalling apscheduler via pip, easy_install, and manually; upgrading setuptools; upgrading all dependencies.
Edit: Code
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
回答1:
This issue is caused by an old version of setuptools. See https://bitbucket.org/agronholm/apscheduler/issues/77/lookuperror-no-trigger-by-the-name
You can solve this by running sudo pip install --upgrade setuptools
and reinstallation of apscheduler with sudo pip install --ignore-installed apscheduler
回答2:
I was working in ipython on a different server. I tried uninstalling/upgrading setuptools and APScheduler. Then I copy and pasted the exact same code I already had into a new notebook that I created on the second server.
And it worked.
回答3:
if you use virtualenv 1.11.6 as I do, upgrade it to 12.0.7 should fix this problem. according to this thread https://bitbucket.org/agronholm/apscheduler/issue/77/lookuperror-no-trigger-by-the-name you may need to upgrade your setuptools too.
回答4:
I experienced the problem with the frozen environment by PyInstaller
and cx_Freeze
, and Flask
, although there is no problem with the virtual one. My configuration and the code as follow,
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')
After the code fixed as follow, the problem disappeared,
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')
来源:https://stackoverflow.com/questions/28682723/no-trigger-by-the-name-interval-was-found