google app engine – Асинхронные блоки кода? питон

Таким образом, у меня есть код, который функционирует примерно так же, как этот общий код:

for blah in blahs: blah.take_forever() for blah2 in blah2s: vars = blah2.take_forever() for var in vars: var.also_take_forever() 

Я хочу что-то, что работает как async, например

 async_start_blah2_loop_then_do_someting_else() do_the_first_blah_loop() gather_results_and_send_them_out() 

Тем не менее, я не использую хранилище данных или urlfetch для этого, так что другие варианты ускорят этот процесс?

"

 map_async(callback, pass_batch_into_callback=None, merge_future=None, **q_options) Asynchronously map a callback function or tasklet over the query results. This is the asynchronous version of map(). 

"

похоже, относится только к запросам хранилища данных.

Предложения?

Вы можете использовать собственный потоковый модуль Python в App Engine для выполнения функций асинхронно (см. Threading.Thread ). Это также отлично работает на автоматических масштабированных экземплярах, поскольку использует «зеленые» потоки вместо потоков ОС.

 def blahFunc(): for blah in blahs: blah.take_forever() def blah2Func(): for blah2 in blah2s: vars = blah2.take_forever() for var in vars: var.also_take_forever() # Execute both loops 'at the same time' background = threading.Thread(target=blah2Func) background.start() blah1Func() 

Обратите внимание, что вы не обязательно получите какую-либо скорость от этого (я предполагаю, что ваш был надуманным примером для простоты), поскольку запрос все еще выполняется внутри одного и того же «реального» потока ОС, но он полезен, если вам нужно избегать блокировки на длинном операция.

Если у вас действительно длительные задачи, которые могут потребоваться дольше, чем запрос, лучшим решением будет использование Task Queues .