我一直在尝试运行一个计时器来增加一个计数器,一个类用它来打印出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,那么它应该首先运行,并且在其他一切正确的情况下运行,或者我只是关于如何执行此操作?
答案 0 :(得分:0)
最后一个参数是要传递给函数的参数序列。 counter
不是一个序列,但你可以通过将它包装在一个元组中来使它成为一个序列:
s.enter(5, 0, addCount, (counter,))
来自scheduler.enterabs()
method documentation:
执行事件意味着执行
action(*argument)
。 参数必须是包含 action 的参数的序列。
较低的priority
值确实意味着更高的优先级; 0
在1
之前等等。
图书馆文档中没有明确记录;我不得不去那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