@ODNik

Как оставить дочерний процесс висеть, а родителя закрыть?

Захотел написать себе программу, которая шлёт уведомления на указанное время.
Первая версия моей программы
Проблема в том, что у меня есть несколько файлов: в __main__ я просто считываю данные, для создания словаря, который по сути является уведомлением, потому-что хранит в себе сообщение, заголовок и время отправки. Потом я считываю список словарей-уведомлений с json-файла, добавляю в этот список новое уведомление и перезаписываю json-файл. Затем мне нужно запустить файл sender.py, который сам достаёт из json-файла уведомление, которое ближе всего должно сработать по времени, перезаписывает json-файл, вычисляет время до срабатывания в секундах, выполняет time.sleep(seconds_to_sleep) и затем вызывает функцию, которая и отправляет уведомление. В данный момент я использовал subprocess.Popen([sys.executable, path_to_the_script])

И всё бы ничего, в cmd.exe всё ок, но если закрыть консоль досрочно или если открывать __main__.py непосредственно через python, то в первом случае уведомление не приходит, а во втором, консоль, в которую я вписывал данные не закрывается до тех пор, пока не прийдёт уведомление.

Итак, вернёмся к subprocess.Popen([sys.executable, path_to_the_script]). Чем его можно заменить, чтобы решить мою проблему ?


Возможно не все понимают чего именно я хочу? Нужно было сразу написать, но лучше поздно, чем никогда.

Итак. Я хочу, чтобы мой __main__.py считывал данные, запускал дочерний процесс, который будет висеть, пока не отправит уведомление, а сам __main__.py закрывался сразу же после запуска дочернего процесса.

Может теперь проблема стала более ясна.

Вторая версия программы
У меня есть __main__.py и subfile1.py . В сабфайле я описываю функцию, которая рассчитывает сколько секунд нужно спать, спит и потом вызывает функцию для отправки самого уведомления. В main я импортирую саб (это нужно для того, чтобы работала библиотека на Windows), считываю данные(время отправки, сообщение и заголовок) и выполняю 2 строчки:
p = multiprocessing.Process(target = subfile1.Notification, args = (time, msg, title))
p.start()

Но, к сожалению, мой родительский процесс дожидается завершения дочернего, а если его закрыть, то и дочерний не выполнит свою работу.

Где я допустил ошибку ?
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
@qid00000000
Мало что знаю, но информацию найду в гугле
Библиотеку multiprocessing пробовали использовать?

https://docs.python.org/3/library/multiprocessing.html
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы