Постоянное выполнение фоновой задачи в Django - PullRequest
1 голос
/ 11 июля 2019

Я использую сервер в Джанго, который постоянно принимает значения.Функция usede foreverloop в нем, когда я вызываю эту функцию, она никогда не выходит из цикла.Моя проблема - я хочу постоянно получать значения с сервера и использовать их после слов в любом месте.

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

    ip = "192.168.1.15"

    port = 5005

    def eeg_handler(unused_addr, args, ch1, ch2, ch3, ch4, ch5):

        a.append(ch1)

        print(a)

    from pythonosc import osc_server, dispatcher

    dispatcher = dispatcher.Dispatcher()

    dispatcher.map("/muse/eeg", eeg_handler, "EEG")

    server = osc_server.ThreadingOSCUDPServer(
        (ip, port), dispatcher)

    # print("Serving on {}".format(server.server_address))

    server.serve_forever()

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Вы можете использовать django-background-tasks, рабочую очередь на основе базы данных для django.Вы можете следовать инструкциям по установке здесь .

Пример фоновой задачи для вашего случая:

from background_task import background

@background(schedule=60)
def feed_database(some_parameter):
    # feed your database here
    # you can also pass a parameter to this function
    pass

Все, что вам нужно, это позвонить feed_database изобычный код для активации фоновой задачи, который создаст объект Task и сохранит его в базе данных и запустит эту функцию через 60 секунд.

В вашем случае вы хотите запускать эту функцию бесконечно, чтобы вы могли что-то сделатьнапример:

feed_database(some_parameter, repeat=60, repeat_until=None)

Это будет запускать вашу функцию один раз в 60 секунд, бесконечно.

Они также предоставляют команду управления django, где вы можете давать команды запуска для ваших задач (если выне хотите запускать задачу из своего кода), используя python manage.py process_tasks.

0 голосов
/ 11 июля 2019

Вы можете создать Управляющую команду

С помощью Управляющей команды вы можете получить доступ к своей базе данных так же, как и к ней через Django.

Затем вы можете запланировать эту команду из cron или вы можете сделать этот запуск навсегда, потому что он не заблокирует ваше приложение.

Другой гид для написания команды управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...