我正在Django中运行服务器,该服务器连续获取值。该函数在其中使用了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()
答案 0 :(得分:0)
您可以创建一个Management command
使用管理命令,您可以通过通过Django访问数据库的方式来访问数据库。
然后,您可以从cron安排此命令,也可以使其永久运行,因为它不会阻塞您的应用程序。
另一个guide来写管理命令。
答案 1 :(得分:0)
您可以使用django-background-tasks,这是django的数据库支持的工作队列。您可以按照here中的说明进行安装。
针对您的案例的示例后台任务为:
<simpleError in get_soils_raster(product, attribute, component, depth, aoi, skip_val = TRUE): http error 400.>
您需要的是从常规代码中调用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
来激活后台任务,这将创建一个Task对象并将其存储在数据库中,并在60秒后运行此功能。
在您的情况下,您想无限运行此函数,因此您可以执行以下操作:
feed_database
这将在60秒内无限次地运行您的函数。
它们还提供了django管理命令,您可以在其中使用feed_database(some_parameter, repeat=60, repeat_until=None)
向任务提供运行命令(如果您不想从代码中启动任务)。