Запуск фонового процесса Python

Рейтинг: 0Ответов: 1Опубликовано: 23.06.2023

Кейс следующий: есть приложение на Python в main.py вызывается запуск процесса check_radio.py

def start_check_radio():
    check_radio_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'check_radio.py')
    for proc in psutil.process_iter(['name']):
        if proc.info['name'] == 'python.exe' and check_radio_path in proc.cmdline():
            proc.kill()
    else:
        subprocess.Popen(['python', check_radio_path], creationflags=subprocess.CREATE_NO_WINDOW)


start_check_radio()

player = FTPMusicPlayer()
player.run()

Если запускаю код в PyCharm, всё работает как надо. При закрытии основного окна приложения = check_radio работает в фоне. Но после компиляции в exe через pyinstaller -w --onefile main.py выполняется только основное приложения без запуска процесса check_radio.py

Подскажите, как быть и куда копать. Спасибо

UPD: Получилось запустить с явным указанием абсолютного пути к python.exe, но это не выход.

Может есть идеи?

Ответы

▲ 0

Попробуйте не использовать subprocess а использовать threading к примеру так:
main.py

import check_radio
from threading import Thread

thread = None


def start_check_radio():
    global thread
    thread = Thread(target=check_radio.main)
    thread.start()


def stop_check_radio():
    check_radio.running = False
    if thread:
        thread.join()


start_check_radio()

try:
    player = FTPMusicPlayer()
    player.run()
finally:
    stop_check_radio()
stop_check_radio()

check_radio.py

import time

running = True  # Ключ к остановке выполнения


def main():
    # Замени это своим кодом
    while running:
        time.sleep(1)