Как оценить модуль Python является поточно-ориентированным или нет? - PullRequest
8 голосов
/ 19 сентября 2011

Ну, сначала я подумал, как убедиться, что pydispatcher или pubsub поточно-ориентирован или нет. pubsub может быть немного сложным или сложным для понимания, но pydispatcher кажется простым для реализации. Тогда я начал задаваться вопросом, как выяснить, является ли модуль Python потокобезопасным или нет. Любая эвристика?

Ответы [ 2 ]

2 голосов
/ 22 декабря 2011

Чтобы определить, является ли библиотека или приложение поточно-ориентированным, без ввода автора, я бы искал механизмы для синхронизации потоков: http://effbot.org/zone/thread-synchronization.htm или что он содержит методы потоков: http://docs.python.org/library/threading.html

Однаконичто из этого не скажет вам, как использовать API безопасным для потоков способом.Практически все может быть помещено в объект потока и передано с использованием объектов синхронизации потока.

Для чего-то вроде pubsub можно создать класс, который оборачивает API и связывается исключительно через очереди.Если pubsub находится в том же потоке, что и, например, wx, то можно было бы создать API для добавления сообщений в очередь, используя API потоков для отправки сообщений.Тогда цикл pubsub или таймер может отслеживать очередь.Затем он будет отправлять сообщения.Одна из проблем с переносом чего-то вроде pubsub заключается в том, что где-то это потребует опроса.Это можно сделать прозрачным, если опрос выполняется таймерами.Каждый поток должен был бы выделить таймер для получения сообщений, если pubsub не находился в этом потоке.Возможно, есть более элегантные подходы к этому, но я не знаю о них.

1 голос
/ 19 сентября 2011

С теоретической точки зрения: не существует алгоритма, который бы делал это для произвольной программы.Это похоже на проблему остановки .

Вы можете осмотреть использованные модули и проверить, разрешены ли они для обеспечения безопасности потоков.Но нет общего способа проверить байт-код модуля на предмет безопасности потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...