如何跟踪python多处理池并在每次X迭代后运行一个函数?

2024-06-02 06:54:41 发布

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

我有一些简单的python多处理代码,如下所示:

files = ['a.txt', 'b.txt', 'c.txt', etc..]

def convert_file(file):
  do_something(file) 

mypool = Pool(number_of_workers)
mypool.map(convert_file, files)

我有100000个文件要由convert_file转换,我想运行函数,我每20个转换的文件上传到服务器,而不等待所有文件被转换。我该怎么做呢?在


Tags: 文件of代码txtnumberconvertdefetc
2条回答

您可以在整个进程中使用共享变量来跟踪转换后的文件。你可以找到一个例子here

当进程需要读写时,变量会自动锁定。在锁定期间,所有其他要访问变量的进程都必须等待。因此,您可以在主循环中轮询变量,并检查它是否大于20,而转换过程会使变量不断递增。一旦值超过20,您就重置该值并将文件写入服务器。在

对于多处理,您在如何处理单个作业中发生的异常方面有一个小问题。如果使用map变量,那么在如何轮询结果时需要小心,否则,如果map函数被迫引发异常,则可能会丢失一些结果。此外,你甚至不知道哪个工作出了问题,除非你对工作中的任何异常都有特殊的处理方法。如果您使用apply变体,那么在获得结果时不需要非常小心,但是整理结果会变得更加棘手。在

总的来说,我认为map是最容易工作的。在

首先,您需要一个特殊的异常,它不能在主模块中创建,否则Python将无法正确地序列化和反序列化它。在

例如

自定义_异常.py

class FailedJob(Exception):
    pass

主.py

^{pr2}$

相关问题 更多 >