Как вызвать flashk_websocket отправить сообщение от APScheduler? - PullRequest
0 голосов
/ 12 сентября 2018

Я создаю приложение для работы в качестве списка задач. Для этого я получил бэкэнд 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 для запуска цикла сокета и отправки пользователю сообщения?

...