【发布时间】:2017-06-07 19:53:55
【问题描述】:
我有一个可以随时启动或停止的程序。该程序用于从网页下载数据。首先,用户将在.csv 文件中定义一堆网页,然后保存.csv 文件,然后启动程序。该程序将读取.csv 文件并将其转换为作业列表。接下来,作业被分成 5 个独立的 downloader 函数,这些函数并行工作,但下载时间可能不同。
downloader(共有 5 个)完成下载网页后,我需要它打开 .csv 文件并删除链接。这样,随着时间的推移,.csv 文件会越来越小。问题是有时两个download 函数会尝试同时更新.csv 文件并导致程序崩溃。我该如何处理?
【问题讨论】:
-
这似乎是处理问题的一种特别困难的方法。这些工作是什么?也许这是处理问题的最佳方式。使用 csv 一次来创建作业(可能存储在数据库或单独的文件中)并管理这些作业。如果你想做 csv 的事情,它应该只由一个实体(可能是处理工作的主程序)管理,该实体从工作人员发送响应并更新 csv 文件。
-
你没有。处理来自多个(平行)控制点的副作用是灾难的根源。如果这是使其工作的唯一方法,您可以按照您当前的一些答案所建议的那样实施锁,但是这里似乎并非如此。您应该实现经理/工人模式,让经理处理 IO,将工作交给工人,并从工人那里接收结果。
标签: python multithreading parallel-processing multiprocessing