python:高级python调度程序 - cron样式调度 - 传递函数参数

问题描述:

我正在尝试使用高级python调度程序来调度con样式作业。无论何时我使用不需要任何参数的函数,一切都很好,但是我无法安排同一个作业传递一个或多个参数。您能否提一些建议?python:高级python调度程序 - cron样式调度 - 传递函数参数

from apscheduler.scheduler import Scheduler 

def job_def(var1, var2): 
    print "%s - %s" % (str(var1), str(var2)) 


s = Scheduler() 

s.add_cron_job(job_def,['hello', 'there'], seconds='*/30') 

s.start() 

错误:

Traceback (most recent call last): File "<stdin>", line 1, in <module> 

File "/usr/local/lib/python2.7/dist-packages/APScheduler-2.0.2-py2.7.egg/apscheduler scheduler.py", line 346, in add_cron_job start_date=start_date) 

File "/usr/local/lib/python2.7/dist-packages/APScheduler-2.0.2-py2.7.egg/apscheduler/triggers/cron/__init__.py", line 44, in __init__ field = field_class(field_name, exprs, is_default) 

File "/usr/local/lib/python2.7/dist-packages/APScheduler-2.0.2-py2.7.egg/apscheduler/triggers/cron/fields.py", line 29, in __init__ self.compile_expressions(exprs) 

File "/usr/local/lib/python2.7/dist-packages/APScheduler-2.0.2-py2.7.egg/apscheduler/triggers/cron/fields.py", line 56, in compile_expressions self.compile_expression(expr) 

File "/usr/local/lib/python2.7/dist-packages/APScheduler-2.0.2-py2.7.egg/apscheduler/triggers/cron/fields.py", line 69, in compile_expression (expr, self.name)) 

首先,根据to the documentation,它应该是second="*/30"而不是seconds="*30/"的话,add_cron_jobmethod prototype is

def add_cron_job(self, func, year=None, month=None, day=None, 
week=None, day_of_week=None, hour=None, minute=None, second=None, 
start_date=None, args=None, kwargs=None, **options): 

     """ 
     Schedules a job to be completed on times that match the given 
     expressions. 

     :param func: callable to run 
     :param year: year to run on 
     :param month: month to run on 
     :param day: day of month to run on 
     :param week: week of the year to run on 
     :param day_of_week: weekday to run on (0 = Monday) 
     :param hour: hour to run on 
     :param second: second to run on 
     :param args: list of positional arguments to call func with 
     :param kwargs: dict of keyword arguments to call func with 
     :param name: name of the job 
     :param jobstore: alias of the job store to add the job to 
     :param misfire_grace_time: seconds after the designated run time that 
      the job is still allowed to be run 
     :return: the scheduled job 
     :rtype: :class:`~apscheduler.job.Job` 
     """ 

所以,你的情况,你应该写这样的东西:

from apscheduler.scheduler import Scheduler 

def job_def(var1, var2): 
    print "%s - %s" % (str(var1), str(var2)) 


s = Scheduler() 

s.add_cron_job(job_def, args=['hello', 'there'], second='*/30') 

s.start() 
+0

我重新输入时犯了错误。语法正确 – m1k3y3

+1

@ m1k3y02:我通过正确调用'add_cron_job'编辑了我的答案。 –

+0

工程就像一个魅力!我想我缺少一些关于如何阅读文档 – m1k3y3

这岂不是更容易使用

s.add_interval_job(job_def,args=['hello','there'],seconds=30)

呢?

+0

的基本知识 - 秒= 30将是每分钟执行00:00:30,00:01:30。 - seconds = */30包含0,所以00:00:00,00:00:30,00:01:00,00:01:30,每30秒 –