【发布时间】:2012-02-08 14:26:19
【问题描述】:
在一个 django 项目中,我需要为 db 中的对象生成一些 pdf 文件。由于每个文件需要几秒钟的时间来生成,我使用 celery 来异步运行任务。
问题是,我需要将每个文件添加到 zip 存档中。我本来打算用python的zipfile模块,但是不同的任务可以在不同的线程中运行,我想知道如果两个任务同时尝试将一个文件添加到存档中会发生什么。
下面的代码线程安全吗?我在python的官方文档中找不到任何有价值的信息。
try:
zippath = os.path.join(pdf_directory, 'archive.zip')
zipfile = ZipFile(zippath, 'a')
zipfile.write(pdf_fullname)
finally:
zipfile.close()
注意:这是在 python 2.6 下运行的
【问题讨论】:
-
你使用哪种 celery 并发方法?如果您的代码是在 celery 任务中使用默认的多处理并发方法执行的,那么它们将在单独的进程中执行,您无需担心线程安全。
-
那么,问题不是线程安全,而是同时文件写入访问。
标签: python thread-safety zipfile