当前位置: 首页 > 面试题库 >

Python多处理库错误(AttributeError:__exit__)

梁丘弘
2023-03-14
问题内容

使用时出现此错误pool.map(funct, iterable)

AttributeError: __exit__

没有说明,仅堆栈跟踪到模块内的pool.py文件。

使用这种方式:

with Pool(processes=2) as pool:
   pool.map(myFunction, mylist)
   pool.map(myfunction2, mylist2)

我怀疑可挑剔性可能存在问题(python需要pickle将列表数据转换为字节流,或者将列表数据转换为字节流),但是我不确定这是否正确或是否要调试。

编辑:产生此错误的代码的新格式:

def governingFunct(list):
    #some tasks
    def myFunction():
         # function contents
    with closing(Pool(processes=2)) as pool:
         pool.map(myFunction, sublist)
         pool.map(myFunction2, sublist2)

产生错误:

PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

问题答案:

在Python 2.x和3.0、3.1和3.2中,multiprocessing.Pool()对象 不是上下文管理器
。您不能在with语句中使用它们。只有在Python 3.3及更高版本中,您才可以使用它们。从Python
3multiprocessing.Pool()文档中

版本3.3中的新增功能
:池对象现在支持上下文管理协议–请参阅上下文管理器类型。__enter__()返回池对象,并__exit__()调用Terminate()。

对于早期的Python版本,您可以使用contextlib.closing(),但要考虑到此调用
pool.close() ,而不是pool.terminate()。在这种情况下,请手动终止:

from contextlib import closing

with closing(Pool(processes=2)) as pool:
    pool.map(myFunction, mylist)
    pool.map(myfunction2, mylist2)
    pool.terminate()

或创建自己的terminating()上下文管理器:

from contextlib import contextmanager

@contextmanager
def terminating(thing):
    try:
        yield thing
    finally:
        thing.terminate()

with terminating(Pool(processes=2)) as pool:
    pool.map(myFunction, mylist)
    pool.map(myfunction2, mylist2)


 类似资料:
  • 问题内容: 我是新手,发现错误处理非常冗长。我已经读过它的理由并大体上同意,但是似乎在某些地方似乎有更多代码来处理错误而不是实际工作。这是一个(人为的)示例,我在其中传送“ Hello world!”。进入cat并读取并打印输出。基本上,每一行都可以再处理三个错误,而我什至没有处理任何事情。 有没有惯用的,干净的方法来处理此问题?我只是觉得我在想什么。 问题答案: 显然,我们必须处理任何错误。我们

  • 问题内容: 我正在尝试在代码中实现多处理,因此,我认为我将从一些示例开始学习。我使用了本文档中的第一个示例。 当我运行上面的代码时,我得到一个。我不知道为什么会收到此错误。如果有帮助,我也使用Python 3.5。 问题答案: 这个问题似乎是multiprocessing.Pool的设计特征。见https://bugs.python.org/issue25053。由于某些原因,Pool并不总是与未

  • 本文向大家介绍python错误处理详解,包括了python错误处理详解的使用技巧和注意事项,需要的朋友参考一下 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数open(),成功时返回文件描述符(就是一个整数),出错时返回-1。 用错误码来表示是否出错十分不便,因为函数本身应该

  • 问题内容: 我正在运行一个基于python flask的小型Web服务,我想在其中执行一个小型MySQL查询。当我获得SQL查询的有效输入时,一切都按预期工作,并且我获得了正确的值。但是,如果该值未存储在数据库中,则会收到一个 我试图利用错误处理自己,并在我的项目中使用此代码,但看来这无法正常工作。 基本上,我只想返回一个值,当一切都正常工作时,如果最好不要在服务器上显示错误消息,则不返回任何值。

  • 我试图编写套接字错误处理(确切地说是错误111-连接拒绝),但什么也没有发生。终端打印错误号111发生,但它没有做任何事情: Traceback(最近的调用为last):文件“test.py”,第20行,在s.connect((IP,PORT))中文件“/usr/lib/python2.7/socket.py”,第224行,在meth返回getattr(self._sock,name)(*args

  • 通过对错误类型实现 Display 和 From,我们能够利用上绝大部分标准库错误处理工具。然而,我们遗漏了一个功能:轻松 Box 我们错误类型的能力。 标准库会自动通过 Form 将任意实现了 Error trait 的类型转换成 trait 对象 Box<Error> 的类型(原文:The std library automatically converts any type that imp