如何处理函数的flask-socketio超时

问题描述 投票:0回答:1

我的最终目标是在我的网站上有一个按钮(在React中创建的仪表板),它允许我运行Selenium测试(用python编写)。

我正在使用socket.io,希望我可以将测试结果流回到仪表板,但我似乎在约29秒时达到某种时间限制。

为了调试我做了这个测试用例,它在服务器端完成,但是在emit('test_progress', 29)发生之前我的连接被切断了。

from flask import Flask, render_template
from flask_socketio import SocketIO, join_room, emit

import time

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'

socketio = SocketIO(app)

@socketio.on('run_test')
def handle_run_test(run_test):
    print('received run_test')
    for x in range(1, 30):
        time.sleep(1)
        print(x)
        emit('test_progress', x)
    time.sleep(1)
    print('TEST FINISHED')
    emit('test_finished', {'data':None})

if __name__ == '__main__':
    socketio.run(app, debug=True)

(部分)我的JavaScript

import settings from './settings.js';
import io from 'socket.io-client';

const socket = io(settings.socketio);
socket.on('test_progress', function(data){
    console.log(data);
});

我在浏览器中的控制台

...
App.js:154 27
App.js:154 28
polling-xhr.js:269 POST http://127.0.0.1:5000/socket.io/?EIO=3&transport=polling&t=Mbl7mEI&sid=72903901182d49eba52a4a813772eb06 400 (BAD REQUEST)
...
(reconnects)

最终,我将进行一次测试运行,可能需要40-60秒而不是任意的time.sleep(1) calls,所以我希望该功能能够使用超过29秒。我是否会犯这个错误或有没有办法改变这个时间限制?

python flask socket.io flask-socketio
1个回答
0
投票

我的解决方案是使用线程as described in this question

我还需要实现@copy_current_request_context,以便线程可以进行通信

© www.soinside.com 2019 - 2024. All rights reserved.