2016-06-13 4 views
0

ich das Multiprocessing-Modul auf Python3.4 verwenden. Aus irgendeinem Grund bekomme ich folgende Fehler isinstance mit():isinstance Typeerror erhöhen, wenn auf Multiprozessor-Sperre verwendet

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

Während, wenn ich das gleiche versuchen mit datetime funktioniert es

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

True 

Was ich versucht:

Wenn ich überprüfen sehen, wie Sperren zeigt in der Konsole vs Datetime und ich folgendes:

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

aber folgende Lock zu seiner Definition zeigt, dass es in der Tat eine Klasse ist.

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

    def release(self): 
     pass 

Also warum nennt die Konsole es eine "gebundene Methode". Wie kann ich isinstance() für eine Lock-Instanz verwenden?

+2

definiert. Das 'Lock' ist keine Klasse. Ich bin mir nicht sicher, warum Sie sagen, es ist –

+0

'gebunden Methode DefaultContext.Lock' ... Es ist ein Verfahren zur Herstellung einer Sperre zurückkehrte, nicht eine Klasse – mata

+0

ich PyCharm bin mit. Diese Klassendefinition bekomme ich, wenn ich bei gedrückter Strg-Taste auf "Sperren" klicke. Es liegt in Multiprocessing \\ __ init__.py –

Antwort

0

Es scheint, dass meine PyCharm IDE mich zu einer anderen Definition von Lock geführt hat als der, der interpretiert wird, wenn ausgeführt wird. Letzteres ist eine Funktion. Die Lock-Klasse, nach der ich gesucht habe, ist in multiprocessing.synchronize.py

>>> from multiprocessing import Event, Lock, synchronize 
>>> isinstance(Lock(), synchronize.Lock) 
True 
Verwandte Themen