在多处理锁定时使用isinstance raise typeError

时间:2016-06-13 15:30:23

标签: python python-3.x multiprocessing pycharm isinstance

我在Python3.4上使用多处理模块。出于某种原因,我使用isinstance()获得以下错误:

>>> from multiprocessing import Lock
>>> isinstance(Lock(), Lock)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: isinstance() arg 2 must be a type or tuple of types

然而,如果我对datetime尝试同样的工作

>>> from datetime import datetime, timedelta
>>> isinstance(datetime.now(), datetime)

True

我尝试了什么:

当我查看Lock在控制台与datetime中的显示方式时,我得到以下信息:

>>> Lock()
<Lock(owner=None)>
>>> Lock
<bound method DefaultContext.Lock of <multiprocessing.context.DefaultContext object at 0x00000000039810B8>>
>>> datetime.now()
datetime.datetime(2016, 6, 13, 11, 24, 12, 573712)
>>> datetime
<class 'datetime.datetime'>

但按照Lock的定义显示它确实是一个类。

class Lock(object):
    def acquire(self, blocking=True, timeout=-1):
        pass

    def release(self):
        pass

那么为什么控制台将其称为&#34;绑定方法&#34;。如何在Lock实例上使用isinstance()?

1 个答案:

答案 0 :(得分:0)

似乎我的PyCharm IDE引导我使用Lock的不同定义,而不是运行isinstance时解释的定义。后者是一种功能。我正在寻找的Lock类在multiprocessing.synchronize.py

中定义
>>> from multiprocessing import Event, Lock, synchronize
>>> isinstance(Lock(), synchronize.Lock)
True