isinstance 在多处理锁上使用时引发类型错误
isinstance raising typeError when used on multiprocessing Lock
我在 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 在控制台与日期时间中的显示方式时,我得到以下信息:
>>> 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.
class Lock(object):
def acquire(self, blocking=True, timeout=-1):
pass
def release(self):
pass
那么为什么控制台将其称为 "bound method"。如何在 Lock 实例上使用 isinstance()?
似乎我的 PyCharm IDE 导致我对 Lock 的定义与 isinstance
是 运行 时被解释的定义不同。后者是一个函数。我要找的 Lock class 在 multiprocessing.synchronize.py
中定义
>>> from multiprocessing import Event, Lock, synchronize
>>> isinstance(Lock(), synchronize.Lock)
True
我在 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 在控制台与日期时间中的显示方式时,我得到以下信息:
>>> 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.
class Lock(object):
def acquire(self, blocking=True, timeout=-1):
pass
def release(self):
pass
那么为什么控制台将其称为 "bound method"。如何在 Lock 实例上使用 isinstance()?
似乎我的 PyCharm IDE 导致我对 Lock 的定义与 isinstance
是 运行 时被解释的定义不同。后者是一个函数。我要找的 Lock class 在 multiprocessing.synchronize.py
>>> from multiprocessing import Event, Lock, synchronize
>>> isinstance(Lock(), synchronize.Lock)
True