4

我一直在使用 APScheduler,在尝试运行代码时出现错误“未找到名为 'interval' 的触发器”

它在我的本地机器上非常完美,但可以在我的云机器上运行。

我尝试过:通过 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
4

6 回答 6

5

此问题是由旧版本的 setuptools 引起的。请参阅https://bitbucket.org/agronholm/apscheduler/issues/77/lookuperror-no-trigger-by-the-name

您可以通过运行sudo pip install --upgrade setuptools并重新安装 apscheduler来解决此问题sudo pip install --ignore-installed apscheduler

于 2015-10-28T16:05:40.477 回答
3

其他答案指向环境原因,但这也可能是您使用 APScheudler 的方式。

否则,验证 APScheduler 类(scheduler/trigger/jobstore/job)是否正确实例化

  • 如果是这种情况,LookupError它可能会在BaseScheduler尝试访问调度程序的触发器、作业存储和执行程序时抛出。从 3.6.3 版本开始,这是在base.py_create_plugin_instance()的方法中

最好验证您的文件没有使用与 APScheduler 库相同的名称

于 2020-01-31T16:39:03.883 回答
2

我在另一台服务器上的 ipython 中工作。我尝试卸载/升级 setuptools 和 APScheduler。然后,我将已经拥有的完全相同的代码复制并粘贴到我在第二台服务器上创建的新笔记本中。

它奏效了。

于 2015-02-24T15:28:54.920 回答
1

PyInstaller我通过and cx_Freeze, and遇到了冻结环境的问题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')
于 2018-12-27T01:31:31.757 回答
0

如果您像我一样使用 virtualenv 1.11.6,将其升级到 12.0.7 应该可以解决此问题。根据此线程https://bitbucket.org/agronholm/apscheduler/issue/77/lookuperror-no-trigger-by-the-name,您可能还需要升级 setuptools。

于 2015-03-02T08:08:50.327 回答
0

我有一个非常相似的问题。

我的代码不起作用

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()

我不知道是什么导致了这个问题。

于 2020-06-30T14:14:59.207 回答