Как бороться с тайм-аутом колбы для функции - PullRequest
0 голосов
/ 12 марта 2019

Моя конечная цель - иметь на моем веб-сайте кнопку (панель инструментов, созданную в 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 секунд. Я ошибаюсь или есть способ изменить это ограничение по времени?

1 Ответ

0 голосов
/ 13 марта 2019

Мое решение заключалось в использовании потоков , как описано в этом вопросе

Мне также нужно было реализовать @copy_current_request_context, чтобы поток мог связываться

...