Концепция локальной рабочей очереди для задач, связанных с процессором, важна в Python из-за GIL. На SE есть очевидные ответы на этот счет. Метод подпроцессов используется для обхода отсутствия реального параллелизма, ограниченного процессором. В Python мы можем использовать класс multiprocessing.Pool, чтобы добиться именно этого. Я хотел создать универсальную одноэлементную рабочую очередь, которая могла бы принимать любую функцию и любой тип аргументов и обрабатывать ее асинхронно вместе с моим основным процессом на другом процессоре, как и должна делать рабочая очередь.
Все так просто.
Только на самом деле это не так.
В основе проблемы лежит Проблема с рассолом.
Рассол, как я выяснил, ограничен. См. этот вопрос.
Поскольку когда-то у вас может быть такой код:
Код: Выделить всё
def NetworkClassType(topologyClass):
class Network(topologyClass):
...
Все началось с этой проблемы. Мне приходится использовать этот параметр, поскольку я стремлюсь к общему WQ, и иногда что-то происходит не в контексте, ожидаемом подпроцессом.
Тогда у меня возникла проблема с этим кодом из пакет с маринованными огурцами:
Код: Выделить всё
if reduce is not None:
rv = reduce(self.proto)
Код: Выделить всё
def __getattr__(self, prop):
return None
Но ладно, давайте избавимся от этой странности, удалив приведенный выше код из наших классов.
Тогда я встретил эту ошибку, у которой есть несколько предложений по ее устранению, но ни одно из них не помогло в моем случае.
На этом этапе я остановился. Я подумал про себя: «Я делаю что-то не так. Python — это ориентированная на данные, зрелая и хорошо зарекомендовавшая себя эхо-система. Обычная рабочая очередь не может быть такой сложной. Должно быть, кто-то сделал это до меня». /p>
Чтобы прояснить ситуацию, я виню здесь себя. Должно быть, я что-то пропустил. Есть ли известный пакет для WQ в Python? Может быть, многопроцессорность — не ответ? Может быть, Дилл – это не ответ? Может быть, есть способ обойти GIL (не меняя интерпретатор)? Может быть, я где-то на SE пропустил хоть один краткий ответ на все это?
Теперь я могу продолжать и буду это делать. Я решаю одну проблему за раз, пока не пойму, как достичь своей цели. Но я буду рад, если кто-нибудь покажет мне, что я не прав. На самом деле в Python существует работающая, функционирующая универсальная рабочая очередь (или, что еще лучше, очередь актеров), которая обрабатывает все и очень эффективна.
Я все еще работаю над этим проектом. .
Я попробовал все приведенные выше ссылки (а затем и некоторые) и попытаюсь понять, как заставить мой пакет WQ работать.
РЕДАКТИРОВАТЬ: Я забыл ответить на очевидный вопрос, который может возникнуть, а именно об ОС. Очевидно, что даже общий WQ может не работать в разных ОС. Моя версия предназначена для Windows 10 и выше.
Подробнее здесь: https://stackoverflow.com/questions/787 ... -something