python - 如何在线程内运行递归函数?

标签 python multithreading recursion python-multithreading

我想在我的主代码(我猜它被称为主线程)仍在运行时运行一个重复自身的函数,所以我这样做了,可能有更好的方法来做到这一点,但我对编码和Python很陌生,所以我不知道自己在做什么。

import threading
import time

def x():
    print("hey")
    time.sleep(1)
    x()
t = threading.Thread(target=x)
t.daemon = True
t.start()

当我将 daemon 设置为 False 时,它​​会重复自身,但是当我停止程序时,我会收到错误

最佳答案

CPython(Python 的引用实现)未实现 Tail Call Optimization (TCO) .¹ 这意味着您不能运行过多的递归,因为它是有限的,并且当您达到此限制时,您将收到 RuntimeError

sys.getrecursionlimit() # 3000

因此,不要再次从 x() 中调用 x(),而是在 x() 中创建一个 while True 循环):

import threading
import time

def x():
    while True:
        print("hey")
        time.sleep(1)

t = threading.Thread(target=x, daemon=True)
t.start()
time.sleep(10)  # do something, sleep for demo
<小时/>

1 Stackless Python将是一个没有递归限制的 Python 实现。

关于python - 如何在线程内运行递归函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59231523/

相关文章:

正则表达式:递归反向引用 - 有何用处?

python - PyQt:app.exec_() 停止运行以下所有代码

python - 为什么 numpy.zeros 和 numpy.zeros_like 之间的性能差异?

java - CompletableFuture allof(..).join() 与 CompletableFuture.join()

java - 方法级单例实例线程安全吗?

algorithm - 找到完成可以按任何顺序完成的操作的最短时间

python - SQL 查询中的命名参数 - cx_Oracle - ORA-01460 : unimplemented or unreasonable conversion requested

python - 无法按空格正确拆分 Wi-Fi 信号字符串

c# - 完成任务时手动捕获和应用 SynchronizationContext

javascript - 我的逻辑方向正确吗?