RecursionError:使用线程时超出了最大递归深度

Mar*_*aio 3 python python-multithreading

所以我收到错误

[Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded
Run Code Online (Sandbox Code Playgroud)

我正在运行的代码是

import threading

def hello_world(a):
    threading.Timer(2.0, hello_world(a)).start() # called every minute
    print(a)
    print("Hello, World!")

hello_world('a')
Run Code Online (Sandbox Code Playgroud)

我注意到当hello_world函数中没有参数时不会发生错误。但是一旦我需要将参数传递给函数,我就会收到错误消息。有人可以解释为什么会这样以及如何解决吗?

Gre*_*Guy 5

threading.Timer()构造期望功能参数传递给该函数作为单独的参数。正确的调用方式是这样的:

threading.Timer(2.0, hello_world, (a,)).start()
Run Code Online (Sandbox Code Playgroud)

可以看到我们hello_world没有调用就引用了,我们在一个1元组中分别列出了我们想要传递的参数(a,)

目前的做法是,hello_world(a)在表达式结束之前立即进行评估,试图找出返回值是什么hello_world(a)——而不是启动计时器,然后在每次计时器时评估表达式熄灭。