运行 在 python-chess 的后台进行无限分析的鳕鱼
Running stockfish in infinite analysis in the background in python-chess
我用非常漂亮的 GUI (PyQt5) 编写了一个国际象棋程序。当我输入一个动作时,它会分析它并更新棋盘的 SVG 表示 - 感谢精彩的 python-chess 模块。现在一切正常。但是,我想做的是让引擎在后台工作并无限分析棋盘,让我输入新的动作。这是一个简单的代码示例:
import asyncio
import chess
import chess.engine
board = chess.Board()
async def analyse():
transport, engine = await chess.engine.popen_uci("./stockfish-10-64")
board = chess.Board()
info = await engine.analyse(board, chess.engine.Limit(time=2))
print(info["score"])
await engine.quit()
return(info)
async def get_input():
a = input("enter move in SAN format")
board.push_san(a)
print(board)
xx = await analyse()
print(xx)
while(True):
asyncio.run(get_input())
在这个例子中,我不能在分析完成之前输入新的着法。 (注意:原来设计的动作都是在PyQt5中输入"lineedit"widget,不用担心异步终端输入困难)
谢谢,
您可以使用 'ponder' 属性 of engine.play,这允许在后台进行分析。现在,您可以将 2 秒搜索分成块,并能够在中间输入移动以获得相似的搜索质量。
我用非常漂亮的 GUI (PyQt5) 编写了一个国际象棋程序。当我输入一个动作时,它会分析它并更新棋盘的 SVG 表示 - 感谢精彩的 python-chess 模块。现在一切正常。但是,我想做的是让引擎在后台工作并无限分析棋盘,让我输入新的动作。这是一个简单的代码示例:
import asyncio
import chess
import chess.engine
board = chess.Board()
async def analyse():
transport, engine = await chess.engine.popen_uci("./stockfish-10-64")
board = chess.Board()
info = await engine.analyse(board, chess.engine.Limit(time=2))
print(info["score"])
await engine.quit()
return(info)
async def get_input():
a = input("enter move in SAN format")
board.push_san(a)
print(board)
xx = await analyse()
print(xx)
while(True):
asyncio.run(get_input())
在这个例子中,我不能在分析完成之前输入新的着法。 (注意:原来设计的动作都是在PyQt5中输入"lineedit"widget,不用担心异步终端输入困难)
谢谢,
您可以使用 'ponder' 属性 of engine.play,这允许在后台进行分析。现在,您可以将 2 秒搜索分成块,并能够在中间输入移动以获得相似的搜索质量。