Как правильно завершить процесс Python, порожденный электронным приложением?Python

Программы на Python
Ответить
Anonymous
 Как правильно завершить процесс Python, порожденный электронным приложением?

Сообщение Anonymous »

Я разрабатываю приложение Electron, которое использует исполняемый файл Python в качестве внутреннего сервера. Серверная часть Python создается с помощью child_process.spawn. Хотя приложение большую часть времени работает нормально, я заметил, что когда пользователь выходит из приложения, внутренний процесс Python не всегда завершается. Это приводит к запуску процессов-зомби в фоновом режиме, что является проблематичным.
Это порождает exe-файл Python:

Код: Выделить всё

const { spawn } = require("child_process");
const kill = require("tree-kill");

let pythonBackend;

function startBackend() {
pythonBackend = spawn("path/to/python_backend.exe");

pythonBackend.stdout.on("data", (data) => {
console.log(`stdout: ${data}`);
});

pythonBackend.stderr.on("data", (data) => {
console.error(`stderr: ${data}`);
});

pythonBackend.on("close", (code) => {
console.log(`child process exited with code ${code}`);
});
}
И это попытка остановить это

Код: Выделить всё

async function stopBackend() {
if (pythonBackend) {
if (process.platform === "win32") {
exec(`taskkill /PID ${pythonBackend.pid} /T /F`, (err) => {
if (err) {
console.error("Failed to kill process:", err);
} else {
console.log("Process killed");
}
});
} else {
kill(pythonBackend.pid, "SIGTERM", (err) => {
if (err) {
console.error("Failed to kill process:", err);
} else {
console.log("Python process and its children killed");
}
});
}
pythonBackend = null;
}
}

app.on("before-quit", stopBackend);
app.on("quit", stopBackend);
app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.quit();
}
});

process.on("exit", stopBackend);
process.on("SIGINT", () => {
stopBackend();
process.exit(0);
});
Ни на Mac, ни на Windows он, следовательно, убивает процесс Python. Иногда он просто ничего не делает без какой-либо обратной связи.
Мой вопрос: есть ли надежный способ гарантировать, что exe-файл Python всегда будет завершаться при выходе из электронного приложения?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ectron-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»