在Django中连续运行一个后台任务

3 人关注

我在Django中运行一个服务器,它正在连续取值。其中使用了一个永远循环的函数,当我调用该函数时,它从来没有脱离过循环。

My problem - 我想从服务器上连续取值,然后在我想用的地方使用它。

我尝试了线程,我想我可以做的是做一个后台任务,不断地给数据库提供信息,当我想使用时,我可以从里面取值。但我不知道怎么做

    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()
    
1 个评论
@cagrias 有什么例子可以让我参考的吗?
python
django
Ambuje Gupta
Ambuje Gupta
发布于 2019-07-11
2 个回答
Davide Pizzolato
Davide Pizzolato
发布于 2019-07-11
0 人赞同

你可以创建一个 管理命令

有一个 管理命令 你可以通过Django访问数据库的方式来访问它。

然后你可以从cron安排这个命令,或者你可以让它永远运行,因为它不会阻塞你的应用程序。

另一个 guide 来写管理命令。

cagrias
cagrias
发布于 2019-07-11
0 人赞同

你可以使用django-background-tasks,这是一个由数据库支持的django工作队列。你可以按照他们的安装说明从 here .

为你的案件提供的背景任务样本将是。

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

你只需要从常规代码中调用feed_database来激活你的后台任务,它将创建一个任务对象并存储在数据库中,60秒后运行这个函数。

在你的案例中,你想无限地运行这个函数,所以你可以这样做。

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