0

我正在使用 uwsgi 装饰器(特别是 cron 装饰器)在特定时间做事。我有以下代码:

import cherrypy
import uwsgidecorators

class TestObject(object):
    @cherrypy.expose
    def index(self):
        launchapp = self.launchapp(-1,-1,-1,-1,-1,"foobar")
        return "This is a test"

    @uwsgidecorators.cron(minute,hour,day,month,dayweek)
    def launchapp(self,target):
        print "the target is %s" %target
        return

但是我得到了错误:

    @uwsgidecorators.cron(minute,hour,day,month,dayweek)
NameError: name 'minute' is not defined

我基本上是在尝试在 index 函数中指定 cron 装饰器的计时参数。有人知道我在做什么错吗?

4

1 回答 1

2

为什么您的代码失败

该错误与您传递参数的事实无关,只是minute变量未定义。

你会得到完全相同的错误:

>>> a = 'a'
>>> print b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
>>> 

您可能想要做的是:

@uwsgidecorators.cron(minute = 5,hour = 2, # and so on.

请查看uwsgi 文档以获取更全面的示例。


- 下面编辑。

你怎么能解决它

似乎您正在尝试在索引命中后将任务添加到您的 crontab 中。

这不是装饰器的用例,装饰器只是说函数应该在函数定义的 cron 上运行。基本上,当装饰器被执行(并且函数定义,而不是调用)时,它被添加到 crontab 中。

在您的情况下,您想向 crontab 添加一个函数;所以你应该使用类似的东西uwsgi.add_cron。您可以查看装饰器代码以了解如何使用它。

不过,您不应该使用方法,而是使用函数。

于 2012-09-12T21:50:41.903 回答