threading.Timer()

发布于 2021-01-29 15:07:12

我必须在网络课程中编写一个程序,类似于选择性重复,但需要一个计时器。在谷歌搜索后,我发现threading.Timer可以帮助我,我编写了一个简单的程序来测试threading.Timer的工作原理:

import threading

def hello():
    print "hello, world"

t = threading.Timer(10.0, hello)
t.start() 
print "Hi"
i=10
i=i+20
print i

该程序正常运行。但是当我尝试以给参数的方式定义hello函数时:

import threading

def hello(s):
    print s

h="hello world"
t = threading.Timer(10.0, hello(h))
t.start() 
print "Hi"
i=10
i=i+20
print i

输出是:

hello world
Hi
30
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 522, in __bootstrap_inner
    self.run()
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 726, in run
    self.function(*self.args, **self.kwargs)
TypeError: 'NoneType' object is not callable

我不明白是什么问题!谁能帮我?

关注者
0
被浏览
74
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您只需要将参数hello放入函数调用中的单独项中,就像这样,

    t = threading.Timer(10.0, hello, [h])
    

    这是Python中的常用方法。否则,当您使用时Timer(10.0, hello(h)),此函数调用的结果将传递到TimerNone因为hello这不会显式返回。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看