在 Django 中连续运行后台任务



我在Django中运行一个服务器,它不断地取值。该函数在其中永远循环使用,当我调用该函数时,它永远不会退出循环。

我的问题 - 我想不断地从服务器获取值,并在我想要的任何地方使用它。

我尝试了线程,我认为我可以做的是制作一个后台任务,该任务不断馈送数据库,当我想使用时,我可以从中获取值。但我不知道该怎么做

    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()

您可以创建管理命令

使用管理命令,你可以像通过 Django 访问数据库一样访问数据库。

然后,您可以从cron调度此命令,也可以永久运行此命令,因为它不会阻止您的应用程序。

编写管理命令的另一个指南。

你可以使用 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 为您的任务提供运行命令(如果您不想从代码启动任务(。

最新更新