对于 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
值确实意味着较高的优先级; 0
在 1
之前,等等
这在库文档中没有明确记录;为此,我不得不去 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
我一直在尝试 运行 一个计时器来增加一个计数器,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
值确实意味着较高的优先级; 0
在 1
之前,等等
这在库文档中没有明确记录;为此,我不得不去 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