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