调用APScheduler模块scheduler.add_job方法报错

写了一个小的爬虫,准备用APScheduler间隔调用,在scheduler.add_job方法中报错'func must be a callable or a textual reference to one',看了APScheduler的源代码也找不到解决办法,代码如下

def sprider():
scrapy = WebScrapy()

scrapy.setUp()
scrapy.infoLoad()
scrapy.writeExcel()

print("The End! %s" % time.strftime("%Y%m%d %H:%M:%S", time.localtime()))

if name == "__main__":

scheduler = BackgroundScheduler()
# scheduler.add_job(run ,'cron', hour='3-4', minute='*', second='*/900')
scheduler.add_job(func=sprider(), trigger='interval', id='myrun', minutes=2)

try:
    scheduler.start()
    print(time.strftime("%Y%m%d %H:%M:%S", time.localtime()))

except (KeyboardInterrupt, SystemExit):
    scheduler.shutdown()
    print('Errors!')

如果给sprider()随便加一个字符串返回值,则会报错ref-to-obj(func),找不到模块ref这类的错

求大神指教啊

scheduler.add_job(func=sprider, trigger='interval', id='myrun', minutes=2)
sprider去掉括号

问题分析:
tick函数使用while 出现了阻塞,第一次执行还没结束成阻塞状态,下一个3秒又要执行tick函数导致的。建议是一般项目用APScheduler,因为不用像Celery那样再单独启动worker、beat进程,而且API也很简洁。

推荐看看这个 https://github.com/dbader/schedule ,这个用法简单点,我觉得如果是爬虫的话够用了

这是我使用的 scheduler.add_job(func=aps_test, args=('定时任务',), trigger='cron', second='*/5', id='cron_task')

你的报错 not function ~ 你在func= 等号右边写 function_name() 注意这个括号,这里是运行结果

>>> def a():
...     pass
...
>>> a
<function a at 0x10079af50>
>>> type(a())
<type 'NoneType'>