2014-10-24 2 views
0

Если я делаю urlfetch.make_fetch_call (от webapp2.RequestHandler) с RPC, который имеет обратный вызов и не дожидается RPC, а запрос Appengine завершается, что происходит с асинхронным вызовом? Будет ли это прекращено, или Appengine позволяет это завершить?Appengine Python Async urlfetch После завершения запроса

ответ

2

Это утверждение из документации [1] намек:

«Обратный вызов не происходит в фоновом режиме, приложение должно вызвать метод (ожидание(), check_success() или get_result()), чтобы вызовите функцию обратного вызова. "

В целом, асинхронные вызовы по-прежнему являются локальными для запроса и не запускаются в отдельном процессе в среде выполнения App Engine (то есть являются «пользовательскими» потоками, а не потоками «демона», если вы хотите посмотреть в нее далее). Как только ваш запрос прекратится (либо с помощью DeadlineExceededError, либо иначе), все ожидающие асинхронные вызовы также прекратятся.

[1] https://cloud.google.com/appengine/docs/python/urlfetch/asynchronousrequests

+0

Так это зависит от того, когда 'RequestHandler's процесс завершается? – Eliezer

+0

Точно. Пользовательский поток не может пережить процесс, который породил его. Использование SDK модуля потоков Python можно увидеть в источнике, но оно немного волосатое - https://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api – Adam

+0

I «Я бы хотел, чтобы я копал это, когда у меня есть время. Я также предполагаю, что производство appengine работает по-разному. Мой главный вопрос будет заключаться в том, работает ли каждый «RequestHandler» в своем собственном процессе (надеюсь, нет). – Eliezer

Смежные вопросы