Я запускаю устойчивую функцию Azure, запускаемую по HTTP, со вложенной структурой оркестратора. Одно выполнение функции может выполняться несколько часов и выполнять сотни операций с базой данных.
Во время разработки и тестирования я запускаю эту функцию локально в своем VS Code [MacOS] в режиме отладки. Чтобы остановить запуск процесса, я просто нажимаю Ctrl + C, чтобы завершить процесс.
Проблема: когда я перезапускаю отладчик, функция продолжает работу с того места, где остановилась, и выполняет чрезвычайно длительные процессы. Я не могу понять, как полностью остановить ранее запущенные процессы. Я могу сказать, что они работают, по журналам, которые я вижу в своем терминале.
При запуске функции, запускаемой HTTP, я получаю "statusQueryGetUri"
и "terminatePostUri"
, которые я обычно использую для остановки функции, однако я понятия не имею, какое выполнение выполняется в данный момент, и не знаю, как я могу получить идентификатор, который позволил бы мне для завершения цикла, который все еще активен.
Вот как выглядит мой файл launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach to Python Functions",
"type": "python",
"request": "attach",
"port": 9091,
"preLaunchTask": "func: host start"
}
]
}
Моя функция подключена к моей базе данных разработчиков и к хранилищу BLOB-объектов разработки.
azure-functions==1.17.0
azure-functions-durable==1.2.6
Код VS: Версия: 1.90.2
ОС: Дарвин Arm64 23.3.0
Я пытался:
ps aux | grep python
, затем kill -9 ID
Я ожидаю:
Я ожидаю запустить отладчик и увидеть, что моя функция Azure простаивает, пока я не запущу триггер HTTP через почтальона. Затем, когда я запускаю функцию, но снова останавливаю ее, убивая терминал или процесс, я ожидаю, что она не продолжится при следующем запуске отладчика.
terminatePostUri
своей функции.Вы можете получить InstanceID функции из terminPostUri.
http://localhost:7071/runtime/webhooks/durabletask/instances/<Instance_ID>/terminate?reason = {text}&taskHub=TestHubName&connection=Storage&code=rzKXAu_HfN3-JqjaYvOzZon5ACBt8Ew7lVvou6zQNMjDAzFuFAtHMw==
terminatePostUri
, обновив причину в URI, он остановит выполнение функции с помощью команды:func durable terminate --id <Instance_ID> --reason <reason to terminate>
Отключите отладчик, чтобы остановить функцию на панели отладки.
Чтобы полностью остановить локально запущенную функцию Azure, вам следует остановить процесс, который запускает функцию, в Мониторе активности в macOS.
func host start --debug
и используйте Ctrl+C
, чтобы остановить выполнение функции:Использованная литература:
Проверьте, помогает ли приведенное ниже решение @Julian.