python:高级 python 调度程序 - cron 风格调度 - 传递函数参数

发布于 2024-12-13 10:01:15 字数 1317 浏览 4 评论 0原文

我正在尝试使用高级 python 调度程序来安排 con 风格的作业。每当我使用不需要任何参数的函数时,一切都很好,但是我无法安排传递一个或多个参数的同一作业。你能建议一下吗?

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

I am trying to schedule con style job using advanced python scheduler. Everything is fine whenever I use function that does not require any parameters, however I am unable to schedule the same job passing one or more arguments. Could you please advise?

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

Error:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ぺ禁宫浮华殁 2024-12-20 10:01:15

首先,根据文档,它应该是second= “*/30” 而不是 seconds="*30/",然后,add_cron_job 方法原型是

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

First, according to the documentation, it should be second="*/30" instead of seconds="*30/", then, the add_cron_job method 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`
         """

so, in your case, you should write something like this :

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()
故乡的云 2024-12-20 10:01:15

使用起来不是更方便吗

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

代替?

Would it not be easier to use

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

instead?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文