【问题标题】:Pickling error on concurrent.Futures.PoolProcessExecutor - How to Lock?concurrent.Futures.PoolProcessExecutor 上的酸洗错误 - 如何锁定?
【发布时间】:2016-02-25 07:21:47
【问题描述】:

几个月来我一直在搞乱多处理,现在试图找出一个优雅的可重复解决方案来解决我希望多个进程写入同一个文件而不会相互混淆的问题。

我过去曾使用多处理生产者/消费者关系来克服这些障碍。我发现的好文章和帖子包括:

我尝试实现类似于此处描述的共享计数器的功能:

我已经成为 concurrent.Futures ProcessPoolExecutor 的简单性以及在每个执行程序上使用 map 的忠实粉丝,如下所述:

今晚,我以为我通过发现一个名为用于读写锁的紧固件模块找到了搜索的答案,但显然这种方法只适用于线程。

问题: 是否有一种优雅、简单的共享锁解决方案,以便 ProcessPoolExecutor 中的所有进程在写入文件时不会相互覆盖?

注意:我正在使用 csv.DictWriter 将大约 800M 行约 200 个字段写入一个文件。欢迎其他建议。

【问题讨论】:

  • 我只是尝试使用全局变量,如果未设置为全局变量则设置锁。仍然对更好的解决方案持开放态度。也许是工作库?

标签: python locking multiprocessing file-writing concurrent.futures


【解决方案1】:

您从错误的角度看待解决方案。与其共享锁来保护对文件的访问,不如将文件访问权限授予单个进程。其他进程只会告诉它要写什么。

从这个角度来看,有很多类似于你在 stackoverflow 上的问题。

Python multiprocessing safely writing to a file

Writing to a file with multiprocessing

Python Multiprocessing using Queue to write to same file

【讨论】:

    猜你喜欢
    • 2014-09-15
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    相关资源
    最近更新 更多