2016-06-13 5 views
0

私はPython3.4でマルチプロセッシングモジュールを使用しています。何らかの理由で私はでisinstance()を使用して、次のエラーを取得する:isinstance racing typeError(マルチプロセッシングで使用する場合)Lock

>>> 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(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'> 

ですが、ロックの定義に従えば、それは本当にクラスであることがわかります。

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

    def release(self): 
     pass 

なぜ、コンソールはそれを「バインドされた方法」と呼びますか? Lockインスタンスでisinstance()を使用するにはどうすればよいですか?

+2

で定義されています。 'Lock'はクラスではありません。なぜあなたはそれが –

+0

であると言うのか分かりません。 'bound method DefaultContext.Lock' ...ロックではなくクラスを返すメソッドです。 – mata

+0

私はpyCharmを使用しています。そのクラス定義はCtrl +「ロック」をクリックしたときのものです。それはマルチプロセッシングです\\ __ init__.py –

答えて

0

私のPyCharm IDEは、isinstanceが実行されたときに解釈されるものとは異なるロックの定義につながっているようです。後者は関数です。私が探していたロッククラスは、multiprocessing.synchronize.py

>>> from multiprocessing import Event, Lock, synchronize 
>>> isinstance(Lock(), synchronize.Lock) 
True 
関連する問題