对于 python 中的预定事件,操作意味着什么?

What does action mean for scheduled events in python?

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

我有些东西在工作,但它总是 运行ning 在我的 cmd 提示符和主文件之上,所以当它 运行ning 时其他任何东西都无法工作。

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

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 作为动作,但如果我使用计数器作为参数,那么它 returns 它需要是一个序列而不是一个 int。我可以将 counter 更改为 counter.append(1) 以将计数器加 1 吗?或者我如何让 addCount 到 运行 作为每 5 秒的计划任务?

此外,如果我将优先级设置为 0,那么它应该 运行 首先,然后在其他一切都正确的情况下,或者我只是不知道如何做到这一点?

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

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

来自scheduler.enterabs() method documentation:

Executing the event means executing action(*argument). argument must be a sequence holding the parameters for action.

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

这在库文档中没有明确记录;为此,我不得不去 module source;文档字符串指出:

As in UNIX, lower priority numbers mean higher priority; in this way the queue can be maintained as a priority queue.

请注意,您的 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