Захотел написать себе программу, которая шлёт уведомления на указанное время.
Первая версия моей программыПроблема в том, что у меня есть несколько файлов: в __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()
Но, к сожалению, мой родительский процесс дожидается завершения дочернего, а если его закрыть, то и дочерний не выполнит свою работу.
Где я допустил ошибку ?