【发布时间】: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