Python 烧瓶和烧瓶插座冲洗所有发射事件

Python 烧瓶和烧瓶插座冲洗所有发射事件,python,websocket,socket.io,flask-socketio,Python,Websocket,Socket.io,Flask Socketio,如何刷新flask socketio emit事件,使多条线流到客户端,而不是同时通过多条线 我正在与Flask和Flask socketIO合作制作一个web应用程序,让用户与开放源码的国际象棋AI(如gnuchess和crafty)对弈。国际象棋人工智能将他们的“思维”作为标准输出输出到服务器终端,但我正在使用flask socketIO将这种思维发送给用户 这都是设置和工作,但我的问题是,每一行思维都在一大块中完成,而不是在AI打印时输出每一行 例如,在与gnuchess比赛时,服务器打印

如何刷新flask socketio emit事件,使多条线流到客户端,而不是同时通过多条线

我正在与Flask和Flask socketIO合作制作一个web应用程序,让用户与开放源码的国际象棋AI(如gnuchess和crafty)对弈。国际象棋人工智能将他们的“思维”作为标准输出输出到服务器终端,但我正在使用flask socketIO将这种思维发送给用户

这都是设置和工作,但我的问题是,每一行思维都在一大块中完成,而不是在AI打印时输出每一行

例如,在与gnuchess比赛时,服务器打印出如下想法:

AI thinking: Thinking...
AI thinking: 1 +4 0 2 a5
AI thinking: 1 +9 0 4 b5
AI thinking: 1 +51 0 8 d5
AI thinking: 1 +53 0 21 Nc6
AI thinking: 2 -1 0 47 Nc6 Nc3
AI thinking: 3 +53 0 155 Nc6 Nc3 Nf6
AI thinking: 4 -1 0 613 Nc6 Nf3 Nf6 Nc3
4 -1 0 613 Nc6 Nf3 Nf6 Nc3
3 +53 0 155 Nc6 Nc3 Nf6
2 -1 0 47 Nc6 Nc3
1 +53 0 21 Nc6
1 +51 0 8 d5
1 +9 0 4 b5
1 +4 0 2 a5
Thinking...
这些线流到我的服务器。在客户端,我发出AI行,它向客户端(现在)显示为ul,如下所示:

AI thinking: Thinking...
AI thinking: 1 +4 0 2 a5
AI thinking: 1 +9 0 4 b5
AI thinking: 1 +51 0 8 d5
AI thinking: 1 +53 0 21 Nc6
AI thinking: 2 -1 0 47 Nc6 Nc3
AI thinking: 3 +53 0 155 Nc6 Nc3 Nf6
AI thinking: 4 -1 0 613 Nc6 Nf3 Nf6 Nc3
4 -1 0 613 Nc6 Nf3 Nf6 Nc3
3 +53 0 155 Nc6 Nc3 Nf6
2 -1 0 47 Nc6 Nc3
1 +53 0 21 Nc6
1 +51 0 8 d5
1 +9 0 4 b5
1 +4 0 2 a5
Thinking...
以下是相关代码:

@main.route('/getpythondata')
def get_python_data():

    # gets current proc by finding user's most recent game...
    current_game = get_current_game(current_user)
    current_proc = get_current_proc(current_game)
    line = current_proc.stdout.readline().rstrip()
    socketio.emit(
            'echo',
            {'echo': line})
    # for gnu chess
    if current_game.ai == "GNU chess":
        while ("My move is" not in line):
            socketio.emit(
                'echo',
                {'echo': line})
            print "AI thinking: " + line
            line = current_proc.stdout.readline().rstrip()

        colon_index = line.index(":")
        line_length = len(line)
        pythondata = line[(colon_index + 2):(line_length)]
        current_game.cpu_moves.append(pythondata)
        return json.dumps(pythondata)
这里的问题是,所有socketio.emit事件在flask路由返回后作为一大块文本传递。也许他们被困在缓冲区了?有没有办法把它们洗掉

“打印”人工智能的想法是:“+行代码向服务器传输多行文本,一次一行,就像人工智能输出文本一样。但是,socketio.emit代码一次全部传输到客户端,而不是逐行输出

有什么想法吗?

在您的
socketio.emit()语句之后使用
eventlet.sleep(0)

当然,您必须
导入eventlet


来源:

首先导入socketio对象(确保路径指向创建它的位置)

然后使用

socketio.sleep(0)
我创建了一个函数来为我睡眠:)

用我想作为JSON发送的字符串调用它

elehelper.send_status({'code': 201, 'message': 'Jana\'s skull stripper started!'})

哈哈,谢谢你的回复。你所在的车队实际上是我和米格尔的车队。哈哈,很好,我没抓到是你:p