无限 while 循环意外停止 python 线程

Infinite while loop stopping unexpectedly python threading

希望你今天过得愉快:)

最近在做一个象棋程序

我现在正在制作 AI,我正在使用 Stockfish 进行测试。

因为我需要计算机有时间在不暂停 pygame 游戏循环的情况下进行评估,所以我使用线程库。

我还使用 python-chess 作为我处理游戏状态和移动以及访问 Stockfish 的主要库。

这是我的线程代码:

def engine_play():
    global player_color
    global board
    while board.result() == "*":
        if board.turn is not player_color:
            result = engine.play(board, chess.engine.Limit(time=3.0))
            board.push(result.move)
            print(result.move)
    print(board.result())

engine_thread = threading.Thread(target=engine_play)
engine_thread.setDaemon(True)
engine_thread.start()

由于某种原因,engine_play() 中的 while 循环停止执行。

它不会始终如一地停止,它只是随机停止。

当它在 while 循环后打印 board.result 时,值 = "*"。

当条件 (board.result() == "*") 仍然满足时,这个 while 循环如何停止?

真的是线程问题吗?

此外,pygame 游戏循环仅更新图形并实现诸如拖放功能之类的功能。

没有错误显示,我只有这一个线程。

我不完全确定循环停止的原因,但我确实找到了解决问题的方法。 而不是:

while board.result() == "*":
    if board.turn is not player_color:
        result = engine.play(board, chess.engine.Limit(time=3.0))
        board.push(result.move)
        print(result.move)
print(board.result())

我设置了一个无限循环并每次检查 board.result()。

while True:
    if board.result() == "*":
        if board.turn is not player_color:
            result = engine.play(board, chess.engine.Limit(time=3.0))
            board.push(result.move)
            print(result.move)
print(board.result())

将Daemon设置为True似乎也很重要,否则无限循环将阻止程序停止。