Python: пространства имен в xml ElementTree (или lxml)

Есть объект класса QNetworkReply. Есть слот (в каком-то другом объекте), связанный с его сигналом finished (). Сигналы синхронные (по умолчанию). Есть только один поток.

В какой-то момент я хочу избавиться от обоих объектов. Больше никаких сигналов или чего-либо от них. Я хочу, чтобы они ушли. Ну подумал, воспользуюсь

delete obj1; delete obj2;

А можно? Спецификации для ~ QObject говорят:

Удаление QObject во время ожидания доставки ожидающих событий может вызвать сбой.

Что такое «ожидающие события»? Может ли это означать, что пока я вызываю свое delete , уже есть некоторые «ожидающие события», которые нужно доставить, и что они могут вызвать сбой, и я не могу действительно проверить, есть ли они?

Итак допустим, я звоню:

obj1->deleteLater(); obj2->deleteLater();

На всякий случай.

Но действительно ли я в безопасности? deleteLater добавляет событие, которое будет обработано в основном цикле, когда туда попадет управление. Могут ли уже быть какие-то ожидающие события (сигналы) для obj1 или obj2 , ожидающие обработки в основном цикле , прежде чем deleteLater будет обработан? Это было бы очень прискорбно. Я не хочу писать код, проверяющий статус «несколько удален» и игнорирующий входящий сигнал во всех моих слотах. Я вижу, что существует ряд доступных скриптов, некоторые из которых являются интерпретаторами, но среди компиляторов RemObjects pascal script и Delphi Web Script (DWS) кажутся мощными и активно разрабатываются.

Кто-нибудь может предложить преимущества одного перед другим? m, используя модифицированную версию рабочего процесса «В конечном итоге» из спецификации F # для моей разработки на Xbox. Похоже, что платформа .net на Xbox не поддерживает хвостовые вызовы. Из-за этого я должен ...

Я использую модифицированную версию рабочего процесса «В конечном итоге» из спецификации F # для разработки на Xbox. Похоже, что платформа .net на Xbox не поддерживает хвостовые вызовы. Из-за этого я должен отключить оптимизацию хвостового вызова при компиляции.

Хотя сначала может показаться, что это ограничение предотвратит использование любой формы цикла в вычислительных выражениях, я изначально думал, что «пошаговое выполнение» позволит избежать этой проблемы. : Рекурсивная функция f в вычислительном выражении не вызывает себя напрямую, вместо этого она возвращает значение Eventually, содержащее лямбду, которая вызывает f.bind @ 17-1 ", код которого показан ниже. Номер строки, отображаемый в трассировке стека, - это строка 17.

let rec bind k e =
    match e with
    | Completed r ->
        Running(fun () -> k r)
    | Running f ->
        Running(fun () -> f() |> bind k)  // line 17
    | Blocked(dt, f) ->
        Blocked(dt, fun () -> f() |> bind k)
    | BlockedNextFrame f ->
        BlockedNextFrame(fun () -> f() |> bind k)
    | Yield f ->
        Yield(fun () -> f() |> bind k)

В чем я ошибаюсь? Мои рассуждения о том, что" пошаговая рекурсия "безвредна при переполнении стека, неверны? что-то не так с моей реализацией связывания?

Ой! Продолжение перехода с рекурсией вызывает у меня головную боль ...

РЕДАКТИРОВАТЬ: «Пошаговая рекурсия, безвредная при переполнении стека» получила название, я только что узнал. Это называется батут.

10
задан Guy Coder 4 March 2016 в 15:36
поделиться