【问题标题】:Is Celery needed for asynchronous file writing functionality in Django?Django 中的异步文件写入功能需要 Celery 吗?
【发布时间】:2017-12-07 23:50:15
【问题描述】:

我打算在我的 Django 应用程序中添加一些功能,当调用某些视图时,它会将一行数据写入 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 文件上的锁被释放时等待更长的时间来加载视图。因此,我认为将字符串数据的异步队列写入可以在后台运行的文件听起来是一个很好的解决方法。

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

【问题讨论】:

    标签: python django multithreading csv asynchronous


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 2017-06-07
      • 2013-12-21
      • 2012-08-31
      相关资源
      最近更新 更多