无限 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似乎也很重要,否则无限循环将阻止程序停止。
希望你今天过得愉快:)
最近在做一个象棋程序
我现在正在制作 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似乎也很重要,否则无限循环将阻止程序停止。