python - 通过 http 识别 python 线程(使用 django)

标签 python django multithreading django-views

在我的 Django 应用程序上,我有一份报告(csv 下载)可能需要一些时间才能运行。当用户运行报告时,他们将被重定向到“处理”页面,其中 javascript 函数每秒检查服务器以查看是否已创建 csv(文件名包含在 HttpResponse 对象中)。

我正在寻找的是一种识别创建 csv 的线程的方法。这样我就可以向线程添加 estimated_time_to_completion 属性,并将此信息包含在保留页面中。事实上,我可以停止检查(解锁的)csv 是否存在 - 我可以只询问线程是否已完成。

我的 csv 构建线程看起来像 -

class CsvBuilder(threading.Thread):

    def __init__(self, file_name, parameters)
        self.file_name = file_name
        self.parameters = parameters
        threading.Thread.__init__(self)

    def run():
        # ...
        file = open(self.file_name, 'wb')
        writer = csv.writer(file)
        for patient in patients:
            writer.writerow('some data')
            self.time_remaining = # a timedelta object
        file.close()

然后我的 Django 请求将类似于 -

def create_csv(request):
    '''
    Standard django view to create a csv
    '''
    # get filename and parameters from request
    thread = CsvBuilder (file_name, parameters)
    return render_to_response('processing.html', {"thread_id": thread.thread_id})

def check_progress(request):
    '''
    An ajax call to check the progress on a report
    '''
    thread_id = requst.GET['thread_id']
    # find the thread 
    return HttpResponse(thread.time_remaining)

这可能吗?或者我应该以不同的方式解决这个问题?

最佳答案

使用专用的后台任务库可能是最简单和最安全的,它们是为这样的用例设计的。 python 最常见的是 Celery .它具有良好的 Django 支持,并且非常易于使用。

关于python - 通过 http 识别 python 线程(使用 django),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11431013/

相关文章:

c++ - 如何防止用餐哲学家c++中的死锁

python - UnicodeEncodeError : 'charmap' codec can't encode characters

python - 关于 Rails 与 Django 的更新(当前)推荐?

python - Django 不在 DEBUG 中提供 STATIC_ROOT

python - 如何解决这个 celery 错误: Unable to load celery application.模块 'forecast'没有属性 'celery'

c# - .NET Volatile.读/写和互锁范围

java - setTitle() 和 Thread.sleep()

python - 从构造函数返回类的实例

python - 定量数据集的显着性检验(Python Pandas)

Python:如何从列表中的字典创建 DataFrame 列