我有一些简单的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:
您可以在整个进程中使用共享变量来跟踪转换后的文件。你可以找到一个例子here
当进程需要读写时,变量会自动锁定。在锁定期间,所有其他要访问变量的进程都必须等待。因此,您可以在主循环中轮询变量,并检查它是否大于20,而转换过程会使变量不断递增。一旦值超过20,您就重置该值并将文件写入服务器。在
对于多处理,您在如何处理单个作业中发生的异常方面有一个小问题。如果使用
map
变量,那么在如何轮询结果时需要小心,否则,如果map
函数被迫引发异常,则可能会丢失一些结果。此外,你甚至不知道哪个工作出了问题,除非你对工作中的任何异常都有特殊的处理方法。如果您使用apply
变体,那么在获得结果时不需要非常小心,但是整理结果会变得更加棘手。在总的来说,我认为
map
是最容易工作的。在首先,您需要一个特殊的异常,它不能在主模块中创建,否则Python将无法正确地序列化和反序列化它。在
例如
自定义_异常.py
主.py
^{pr2}$相关问题 更多 >
编程相关推荐