Donc, j'ai un programme Python multithread, qui souffre actuellement d'une impasse. J'allais faire un journal de lock Acquérir en sous-classing threading.lock Objects: Lorsque j'essaie d'exécuter le programme, je reçois l'erreur suivante: p> class DebugLock(threading.Lock):
TypeError: Error when calling the metaclass bases
cannot create 'builtin_function_or_method' instances
3 Réponses :
Vous pouvez simplement utiliser le "a un verrou" versus "est une approche de verrouillage", comme: où j'ai jeté dans les gardes contextuels appropriés depuis que vous voulez probablement Utilisez le Utilisation indiquée ci-dessous: P> avec la syntaxe code> avec vos serrures (qui ne le feriez pas?). P>
>>> lock = DebugLock()
>>> with lock:
... print("I'm atomic!")
...
acquired <__main__.DebugLock object at 0x7f8590e50190>
I'm atomic!
released <__main__.DebugLock object at 0x7f8590e50190>
>>>
Russ a répondu à la question importante (n ° 2), je vais répondre à la question n ° 1.
ne semble pas être possible. threading.lock () est une fonction d'usine ( Documentation ). Ça appelle thread.allocactor_lock () - il n'y a pas de contrôle sur la création d'objets de verrouillage. Vous ne pouvez pas non plus choisir la définition de la classe thread.locktype (le squelette de classe exposé dans fil.pi). P>
>>> thread.LockType.foo = "blah" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't set attributes of built-in/extension type 'thread.lock'
Si vous voulez faire quelque chose comme héritage sans courir dans cette erreur, je vous suggère d'essayer ma méthode normale d'utilisation et qui se bloque, alors je pense que cela fonctionne. P> p> auto .__ DICT __. Mise à jour (verrouillage .__ DICT__) code> ne semble pas fonctionner. J'ai testé cela avec le code de verrouillage p>