python - Django 中的异步文件写入功能是否需要 Celery?

标签 python django multithreading csv asynchronous

我计划向我的 Django 应用程序添加一些功能,以便在调用某些 View 时将一行数据写入 csv 文件:

    session_dict = collectUserDataFromRequest(request) #....collect parameters from  request

     if os.path.isfile(filename):

        with open(filename, 'a') as csv_file:
            a = csv.DictWriter(csv_file,session_dict.keys())
            a.writerow(session_dict)
            csv_file.close()

    else:

        with open(filename, 'w') as csv_file:
            w = csv.DictWriter(csv_file,session_dict.keys())
            w.writeheader()
            w.writerow(session_dict)
            csv_file.close() 

     # then proceed to render the html

我面临的一个问题是当多个用户同时访问我的应用程序时处理潜在的竞争条件。虽然数据可以按任何顺序添加到 csv 文件中,但我不希望某些用户在等待 csv 文件上的锁释放时等待更长时间来加载 View 。因此,我认为要写入可在后台运行的文件的异步字符串数据队列听起来是一个很好的解决方法。

有人告诉我,Celery 是一个很好的框架,可以将异步进程添加到我的 Django 应用程序中。但浏览了几个教程,我发现通常需要额外的框架,例如 Redis。我担心这对于我想要实现的目标来说可能有点过分了。我是否可以使用标准的多处理方法,例如解释的here或者在 Django 生产环境中使用多线程是否还有其他缺点。

最佳答案

第一点:您不应该有并发请求尝试写入同一文件。根据您的用例,您应该将数据存储在知道如何处理并发访问的适当关系数据库中,或者拥有每个用户的文件。

第二点:不,你不一定需要celery来进行异步操作,有quite a few other solutions .

关于python - Django 中的异步文件写入功能是否需要 Celery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47705691/

相关文章:

python - 使用列表理解清除多个文本中的换行符不起作用

python - 如何扩展使用 AbstractBaseUser 创建的现有自定义用户模型以拥有多种用户类型,例如客户、培训师和作者?

Django:如何避免污染包含标签中的父上下文?

ios - 在同一方法中的语句之前异步执行一个 block

C++创建线程报错?

multithreading - 比较 GCD 与 performSelectorInBackground : dispatch_async not in background

python - 有没有办法使用 pandas.ExcelWriter 自动调整 Excel 列宽?

python - Django Cripy-forms field_class 未按预期工作

python - 如何将每个抓取的项目组织到 csv 行中?

database - Django 原子检查和递减