Я тестирую Electron и впервые использую его для упаковки настольного приложения. Мое приложение состоит из внешнего интерфейса, созданного в React, и внутреннего интерфейса в flask.
Мое приложение flask было упаковано с помощью pyinstaller, это приложение запускает локальный сервер на ПК, где открывается электронное приложение.
Моя проблема в том, что когда я запускаю приложение, все работает отлично, но когда я закрываю его, локальный сервер Flask продолжает работать в фоновом режиме, и я хочу, чтобы процесс завершался при закрытии приложения. чтобы не генерировать производительность проблемы.
тема, о которой я говорю
Я пробовал много вещей, но не могу заставить приложение завершить процесс при закрытии приложения . Если кто-то сталкивался с подобной проблемой и может мне помочь, буду очень признателен. Спасибо.
Это электронная конфигурация main.js:
const { app, BrowserWindow } = require('electron');
const { execFile, exec } = require('child_process');
const path = require('path');
const kill = require('tree-kill');
let mainWindow;
let flaskProcess;
app.on('ready', () => {
// Iniciar Flask
flaskProcess = execFile(
path.join(__dirname, 'back', 'dist', 'main.exe'),
(error, stdout, stderr) => {
if (error) {
console.error(`Error al ejecutar el backend Flask: ${error.message}`);
}
if (stderr) {
console.error(`Errores del backend Flask: ${stderr}`);
}
}
);
// Crear la ventana principal
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
nodeIntegration: true,
},
});
// Cargar la aplicación React
mainWindow.loadFile(path.join(__dirname, 'build', 'dist', 'index.html'));
mainWindow.on('closed', () => {
if (flaskProcess) {
console.log('Cerrando el servidor Flask...');
flaskProcess.kill('SIGKILL');
}
mainWindow = null;
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
// Detener Flask al salir
app.on('quit', () => {
if (flaskProcess && !flaskProcess.killed) {
console.log('Cerrando el servidor Flask...');
kill(flaskProcess.pid, 'SIGKILL', (err) => {
if (err) {
console.error(`Error al cerrar el proceso: ${err.message}`);
} else {
console.log('Servidor Flask cerrado correctamente.');
}
}); // Fuerza la terminación del proceso
}
});
Как видите, я принудительно закрываю с помощью SIGKILL, я также пробовал с SIGTERM, но ни один из них у меня не работает.
Я где-то видел, что вам нужно захватить эти сигналы из моего бэкэнда flask следующим образом:
Код Flask
import signal
import sys
def handle_exit(signal, frame):
print('Cerrando Flask...')
sys.exit(0)
signal.signal(signal.SIGINT, handle_exit)
signal.signal(signal.SIGTERM, handle_exit)
Это моя электронная конфигурация package.json
{
"devDependencies": {
"electron": "^34.0.0",
"electron-builder": "^25.1.8"
},
"name": "appprueba",
"version": "0.1.0",
"description": "Aplicacion de prueba",
"author": {
"name": "Benja",
"email": "benja@gmail.com"
},
"main": "main.js",
"scripts": {
"build": "react-scripts build",
"electron": "electron .",
"dist": "electron-builder"
},
"build": {
"appId": "com.appprueba.id",
"productName": "Aplicacion Prueba",
"directories": {
"output": "dist"
},
"files": [
"build/**/*",
"back/**/*",
"main.js",
"preload.js"
],
"extraFiles": [
{
"from": "back/dist/",
"to": "back/dist/",
"filter": [
"**/*"
]
}
],
"mac": {
"category": "public.app-category.utilities"
},
"win": {
"target": "nsis",
"requestedExecutionLevel": "requireAdministrator"
},
"linux": {
"target": "AppImage"
}
},
"asar": true,
"dependencies": {
"tree-kill": "^1.2.2"
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... on-builder
Проблема с подпроцессом Flask с использованием Electron-builder ⇐ Javascript
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение