Wie bewerten Sie ein Python-Modul ist thread-sicher oder nicht?

8

Nun, die erste Sache, die mir in den Sinn kam, war sicherzustellen, ob pydispatcher oder pubsub ist Thread-sicher oder nicht. Pubsub könnte ein wenig schwierig oder komplex sein, um herauszufinden, aber pydispatcher scheint einfach zu realisieren. Dann begann ich mich zu fragen, wie man herausfinden kann, ob ein Python-Modul Thread-sicher ist oder nicht. Irgendwelche Heuristiken?

    
Drake 19.09.2011, 08:07
quelle

2 Antworten

2

Um zu bestimmen, ob eine Bibliothek oder Anwendung Thread-sicher ist, ohne Autoreingabe, würde ich nach Mechanismen zum Synchronisieren von Threads suchen: Ссылка oder dass es Threading-Methoden enthält: Ссылка

Nichts davon sagt Ihnen jedoch, wie Sie die API threadsicher verwenden. In einem Thread-Objekt kann praktisch alles gestopft und mit Thread-Synchronisationsobjekten kommuniziert werden.

Für etwas wie pubsub könnte man eine Klasse erstellen, die die API umschließt und ausschließlich über Warteschlangen kommuniziert. Wenn pubsub zum Beispiel im selben Thread wie wx lebte, könnte eine API erstellt werden, um Nachrichten in die Warteschlange einzufügen, indem eine Threading-API zum Senden von Nachrichten verwendet wird. Dann könnte eine Pubsub-Schleife oder ein Timer die Warteschlange überwachen. Es würde dann Nachrichten senden. Eines der Probleme beim Umhüllen von etwas wie Pubsub ist, dass irgendwo abgefragt werden muss. Es könnte transparent gemacht werden, wenn das Abrufen von Zeitgebern durchgeführt wird. Jeder Thread müsste einen Zeitgeber zuweisen, um Nachrichten zu empfangen, wenn sich pubsub nicht in diesem Thread befindet. Es könnte elegantere Ansätze geben, aber ich bin mir ihrer nicht bewusst.

    
Demolishun 22.12.2011 02:48
quelle
1

Aus theoretischer Sicht: Es gibt keinen Algorithmus, der dies für ein beliebiges Programm tut. Es ist wie das Problem beim Anhalten .

Sie können die verwendeten Module überprüfen und prüfen, ob diese als threadsicher gelten. Es gibt jedoch keine allgemeine Möglichkeit, den Byte-Code eines Moduls auf Thread-Sicherheit zu überprüfen.

    
rocksportrocker 19.09.2011 08:49
quelle