我的问题如下:
我有 3 个项目管道
- 一个下载档案的 FilesPipeline
- 一个 ArchiveUnpackerPipeline 解压档案
- 一个 SymbolicLinkerPipeline 生成指向这些档案内容的符号链接
问题如下:
由于网站的构建方式,我可能必须从不同的项目生成指向同一档案的符号链接。如果一切都以顺序方式运行,它可能如下所示:
item_1
开始下载archive_1
item_1
开始拆包archive_1
item_1
files_1
启动from的符号链接archive_1
item_2
看到archive_1
过去下载的,返回item_1
item_2
看到archive_1
过去拆开包装,返回item_1
item_2
files_2
启动from的符号链接archive_1
但是由于下载可能需要一段时间,可能会发生相同的文件被下载两次,依此类推,从而导致错误。
有没有一种优雅的方法来解决这个问题?我的第一个猜测是它可能与一个全局字典一起使用,该字典跟踪每个 download_url 的状态,状态为downloading
, finished_downloading
, unpacking
,finished_unpacking
并使用 twisted Deferred ——但因为我在不确定之前从未使用过 twisted。