动作对python中的预定事件意味着什么?

时间:2015-01-24 08:43:27

标签: python scheduler

我一直在尝试运行一个计时器来增加一个计数器,一个类用它来打印出JSON文件中的不同内容。

我有点工作,但它总是运行在我的cmd提示符和主文件之上,因此在运行时没有其他工作。

然后我开始阅读时间表和线程,现在我遇到了一些问题。这就是我所拥有的:

import time
import sched

s = sched.scheduler(time.time, time.sleep)

counter = 0

def addCount(counter):
    counter = counter + 1

def tick():
    print time.time()
    s.enter(5, 0, addCount, counter)
    s.run()
    print time.time()
    print counter

tick()

我希望它以addCount作为动作运行,但是如果我使用counter作为参数,那么它返回它需要是一个序列而不是一个int。我会将counter更改为counter.append(1)以向计数器添加1吗?或者我如何每隔5秒让addCount作为计划任务运行?

此外,如果我将优先级设置为0,那么它应该首先运行,并且在其他一切正确的情况下运行,或者我只是关于如何执行此操作?

1 个答案:

答案 0 :(得分:0)

最后一个参数是要传递给函数的参数序列counter不是一个序列,但你可以通过将它包装在一个元组中来使它成为一个序列:

s.enter(5, 0, addCount, (counter,))

来自scheduler.enterabs() method documentation

  

执行事件意味着执行action(*argument)参数必须是包含 action 的参数的序列。

较低的priority值确实意味着更高的优先级; 01之前等等。

图书馆文档中没有明确记录;我不得不去那module source; docstring声明:

  

与UNIX一样,优先级较低的数字意味着更高的优先级;在这   这种方式可以将队列维护为优先队列。

请注意,您的addCount()功能无法按照书面形式工作; counter只是一个本地的,因此您每次都会0递增到1。您必须使用全局代码:

counter = 0

def addCount():
    global counter
    counter = counter + 1

然后传入任何参数,因此将argument设为空元组:

def tick():
    print time.time()
    s.enter(5, 0, addCount, ())
    s.run()
    print time.time()
    print counter

演示:

>>> import time
>>> import sched
>>> s = sched.scheduler(time.time, time.sleep)
>>> counter = 0
>>> def addCount():
...     global counter
...     counter = counter + 1
... 
>>> def tick():
...     print time.time()
...     s.enter(5, 0, addCount, ())
...     s.run()
...     print time.time()
...     print counter
... 
>>> tick()
1422090645.65
1422090650.65
1