Я создаю приложение для работы в качестве списка задач. Для этого я получил бэкэнд Flask, в котором хранится задача и запускается событие, когда наступает крайний срок, с использованием Advanced Python Scheduler (APScheduler).
На веб-интерфейсе у меня есть приложение Python для настольных компьютеров, которое подключается к бэкэнду через веб-сокеты и ждет, пока сервер отправит уведомление о наступлении крайнего срока.
Основной сервер Flask с функцией сокета
#To add Flask Sockets for double realtime communication.
from flask_sockets import Sockets
#Define a new Flask app.
application = Flask(__name__)
sockets = Sockets(application)
#Import Daemon to schedule tasks.
from Daemon.controller import Daemon
daemon = Daemon()
daemon.startDaemon()
#This is the daemon route that my client connects to.
#This connection remains for as long as the client has the client app open.
@sockets.route('/daemon')
def schedulerTrigger(ws):
while not ws.closed:
if daemon.isTask():
ws.send("Task HERE!")
print("Task Sent")
message = ws.receive()
print(message)
ws.send(message)
time.sleep(1)
#After this we got the if__main__ initialization of Flask-sockets.
...
Класс Flask Daemon для управления запланированными действиями с помощью APScheduler
#Imports and other stuff
class Daemon():
def __init__(self):
super(Daemon, self).__init__()
self.event = False
#HERE'S JUST A FUNCTION TO INITIALIZE DAEMON AND USE
#REMINDPOST TO TELL THE USER THAT THE TASK IS OVERDUE
def remindPost(self, tskName, tskContent, tskPriority, tskStrtDate, tskEndDate):
self.event = True
print("Don't forget to do: ")
print(tskName)
print(tskContent)
print("Priority: " + str(tskPriority))
print(tskStrtDate)
print(tskEndDate)
Проблема в том, что у меня есть APScheduler в классе и цикл сокетов в основном приложении. Я проверил, и цикл сокетов работает один, так же, как и метод APScheduler.
Я хочу, чтобы APScheduler запустил цикл сокетов, чтобы пользователь клиента знал, что задача просрочена, но я не смог заставить их общаться друг с другом. Как правильно использовать метод APScheduler в классе Daemon для запуска цикла сокета и отправки пользователю сообщения?