Как DeadlineExceededException реализован в Google App Engine for Java?

Для всех, кто получает предупреждение ниже для Swift 4 , для строки при создании NSAppleEventDescriptor из ответа zekel

Необязательное выражение типа «NSAppleEventDescriptor», используемый при проверке опциональных возможностей

Вы можете избавиться от него с помощью этой отредактированной короткой версии:

let myAppleScript = "..."
var error: NSDictionary?
if let scriptObject = NSAppleScript(source: myAppleScript) {
    if let outputString = scriptObject.executeAndReturnError(&error).stringValue {
        print(outputString)
    } else if (error != nil) {
        print("error: ", error!)
    }
}

Однако вы возможно, также понял; с помощью этого метода система записывает это сообщение на консоль каждый раз, когда вы запускаете скрипт:

AppleEvents: получено сообщение MS Mach, которое не было сложного типа, как ожидалось в getMemoryReference.

Очевидно, это объявленная ошибка штатным разработчиком Apple, и, как говорят, это «просто» безвредный спам в журнале и планируется удалить в будущем. Обновления ОС, как вы можете видеть в этом очень длинном сообщении на форуме разработчиков Apple , и вопрос SO ниже:

AppleEvents: получено сообщение MS Mach, которое не было сложного типа, как ожидалось в getMemoryReference

Спасибо Apple, за эти миллиарды ненужных консольных журналов.

8
задан Svante 12 October 2009 в 10:59
поделиться

3 ответа

Я полагаю, что механизм, стоящий за этим исключением, реализован в инфраструктуре движка приложений, которая не является открытым исходным кодом.

Однако вы можете использовать эту функцию для работы в сети или, в более общем смысле, для любого кода с ограничением ввода / вывода, используя java.nio (например, Selector ). Вместо кода, ограниченного ЦП, вы можете использовать java.util.concurrent (например, Future ).

.
1
ответ дан 5 December 2019 в 22:20
поделиться

Таймер запроса

Обработчик запроса имеет ограниченное количество времени на создание и возврат ответ на запрос, обычно около 30 секунд. После крайнего срока был достигнут, обработчик запроса прерывается.

Среда выполнения Java прерывает сервлет, бросая com.google.apphosting.api.DeadlineExceededException. Если обработчик запроса не ловит это исключение, как и все неперехваченные исключения, среда выполнения вернет ошибку сервера HTTP 500 клиенту.

Обработчик запроса может перехватить это ошибка, чтобы настроить ответ. В среда выполнения дает запрос обработчик немного больше времени (меньше секунды) после поднятия исключение, чтобы подготовить заказ ответ.

Хотя запрос может занять до 30 секунд на ответ, App Engine оптимизирован для приложений с кратковременные запросы, обычно это займет несколько сотен миллисекунд. Эффективное приложение быстро реагирует на большинство запросов. Приложение, которое не будет хорошо масштабироваться с приложением Инфраструктура движка.

Часть среды выполнения == Без использования потоков. Эта функция, безусловно, является модификацией виртуальной машины, и я бы не стал затаить дыхание, ожидая исходный код.

3
ответ дан 5 December 2019 в 22:20
поделиться

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

1
ответ дан 5 December 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: