Python 在django中运行长进程,无需芹菜和多进程
我有一个项目,它从用户那里获取大型CSV文件,并在Django视图中使用多线程处理它 我无法使用Python 在django中运行长进程,无需芹菜和多进程,python,django,multithreading,asynchronous,Python,Django,Multithreading,Asynchronous,我有一个项目,它从用户那里获取大型CSV文件,并在Django视图中使用多线程处理它 我无法使用多进程,因为该进程包含无法pickle的外部对象 芹菜在腌制数据方面也有类似的问题 我想使用view,它可以在外部处理这个大型CSV进程,而不必等待进程完成 如果有人刷新页面,相同的视图调用会创建另外两个线程,我想阻止创建新线程 我有这样的代码: q = Queue() def view(request): t1 = Thread(target = threadfunction, args=(
多进程
,因为该进程包含无法pickle的外部对象
芹菜在腌制数据方面也有类似的问题
我想使用view,它可以在外部处理这个大型CSV进程,而不必等待进程完成
如果有人刷新页面,相同的视图调用会创建另外两个线程,我想阻止创建新线程
我有这样的代码:
q = Queue()
def view(request):
t1 = Thread(target = threadfunction, args=(request,csvdata))
t2 = Thread(target = threadfunction, args=(request,csvdata))
q.put(t1)
1.put(t2)
t1.start()
t2.start()
t1.join()
t2.join()
data = []
while not q.empty():
data.extend(q.get())
return HttpResponse(str(data))
def threadfunction(receiverequest,csvdata):
# reading csv and doing some process takes 100secs
returns #somelistdata
将csvdata存储在磁盘上的某个位置,使用芹菜、RQ或带有管理命令的简单cron作业,其中文件路径将作为参数传递(而不是csvdata)。在视图中,计划芹菜/rq作业,或使用计划的cron作业向表中添加条目。最后,您的视图应该重定向到一种定期刷新或通过“ajax”调用刷新的“状态页”。后台作业应生成一个结果文件。完成作业后,状态页面应显示指向生成文件的链接。