所以我想知道这是怎么做的权利。 我试图将长时间运行的任务的进度保存在请求会话对象。而不是用另一个视图方法来获取进程的状态
我使用Pool类使我的长期运行进度异步:
MyCalculation.py
def longrunning(x,request):
request.session['status'] = 5;
return x*x
views.py
def dolongrunning(request, x):
pool = Pool(processes=1)
result = pool.apply_async(MyCalculation.longrunning, [x, request])
return JsonResponse(..)
def status(request):
return JsonResponse(request.session.get('status))
所以这不管用。我的异步作业没有执行,但请求对象没有获取我的进度信息。你知道吗
我怎样才能做到这一点,或者还有别的方法吗? 我觉得传递请求对象通常是个坏主意。 在Django/Python中存储长时间运行的操作的状态有什么好的做法?你知道吗
不同的进程不共享相同的内存空间,但它们会为每个进程获取一个副本。你知道吗
在您的例子中,
longrunning
函数中工作进程接收的request
对象是父进程中创建的对象的副本。对其中一个进程所做的更改不会影响其他进程。你知道吗您要做的是将更新从工作进程发送到父进程,然后在父进程内更新请求状态。你知道吗
这是相当简单的,如果没有设置状态,它实际上会阻塞状态请求,但它给出了一个想法。你知道吗
更好的方法是将请求存储在缓冲区中,并使用线程保持消息队列为空。每次收到状态请求时,都会返回从工人处收到的上一次状态更新。你知道吗
相关问题 更多 >
编程相关推荐