在bigd的python代码中使用map()进行多处理

2024-03-28 08:45:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从存储在data.file文件文件中有大约3000000个url链接。这是我的代码片段

from multiprocessing import Pool
p = Pool(10)
revenuelist = p.map(extract, data.file )

但问题是,由于互联网连接,这是代码再次运行,如果有连接问题。如何向代码中添加容错性(即:存储中间结果,以避免重复执行同一任务)。你知道吗


Tags: 文件代码fromimporturlmapdata链接
1条回答
网友
1楼 · 发布于 2024-03-28 08:45:07

一个非常简单的解决方案是使用一个文件来存储您的当前状态。使用try…finally来处理失败:

with open(FILENAME) as f:
    current = int(f.read() or 0)

if current:
    skip_lines(current)

try:
    with Pool() as pool:
        results = pool.imap(extract, data.file)
        for result in results:
            do_something(result)
            current += 1
finally:
    with open(FILENAME, "w") as f:
        f.write(str(current))

另请参见:'concurrent.futures`(比多处理池). 你知道吗

更好的解决方案是使用数据库来完全跟踪进度,和/或使用更好的任务队列(例如celery)来执行作业。你知道吗

相关问题 更多 >