我对python和Django非常陌生,我正在努力理解解决问题的最佳方法是:
我有一个视图,它必须激活进程/任务/线程并返回成功。 进程/任务/线程操作一个设备,它将根据设备输入更新其状态。 然后我有另一个视图,我将用ajax进行轮询,这个视图应该能够查询后台进程/任务/线程,以了解其状态并将其返回给调用者。在
我读过很多不同的选项,比如多处理,gevent,celery,session,但是我还是不能理解它。在
尝试了会话,但显然我无法从后台任务中访问请求对象。 我没有尝试gevent或celery只是因为我认为如果不使用任何额外的框架,会有一个更简单的解决方案(不想安装RabbitMQ等…)。 尝试了多重处理,代码如下:
def test_process(request):
manager = Manager()
d = manager.dict()
p = Process(target=test_function, args=(d, ))
p.daemon = True
p.start()
return HttpResponse(json.dumps('Ok'), content_type="application/json")
def test_function(d):
d['test'] = 'alex'
def test_manager(request):
manager = Manager()
data = manager.dict().get('test')
return HttpResponse(json.dumps(data), content_type="application/json")
在我写了这篇文章之后,我意识到这个字典可能只被后台进程和执行test峎process的请求的进程共享,因此test_manager得到了一个空字典。在
不知道从这里到哪里去
有什么帮助吗?在
干杯
要使用多处理接口在子进程和父进程之间共享数据,可以使用https://docs.python.org/2/library/multiprocessing.html中建议的方法之一,例如队列或管道。在
下面是使用队列从Django web应用程序中与子进程对话时应该做的事情(我假设后台/子进程正在为web应用程序的所有用户控制一个设备,这样每个人都会得到相同的结果,这也可能是每个会话的结果):
global_q = Queue()
。在Queue
传递给process函数:- 创建将从全局队列读取的其他视图:
^{pr2}$为了使上面的工作没有问题,你必须检查队列是空的还是非阻塞的等等,但是你会明白的。在
相关问题 更多 >
编程相关推荐