Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 4, 2013 12:02:26

ByGreez
От:
Зарегистрирован: 2011-12-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Асинхронное выполнение функций, callback'и

Привет всем!
Вопрос: Нужно сделать одновременное выполнение нескольких медленных запросов(дергание интеграций с фб, vk и тд.). Чтобы дергнул и не ждал пока придет ответ, а дальше дергал(следующие запросы), а когда приходит ответ передавал его в коллбек.
Технологии: celery, mongodb



Офлайн

#2 Апрель 4, 2013 13:52:22

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Асинхронное выполнение функций, callback'и

Офлайн

#3 Апрель 4, 2013 15:13:06

ByGreez
От:
Зарегистрирован: 2011-12-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Асинхронное выполнение функций, callback'и

Спасибо. Буду пробовать! :)



Офлайн

#4 Апрель 5, 2013 15:39:13

ByGreez
От:
Зарегистрирован: 2011-12-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Асинхронное выполнение функций, callback'и

Еще. Я использую сторонние библиотеки, чтобы работать с API разных сервисов.

Т.к. запросы в медленный интернет очень дорого обходятся по памяти(а если еще и воркер ждет ответа, то вообще будет беда).

Может можно как нить сделать запрос, и не ждать ответа, а выполнять код дальше.
А когда приходит ответ, дергнуть коллбек какой?



Офлайн

#5 Апрель 5, 2013 17:52:08

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Асинхронное выполнение функций, callback'и

ByGreez
Может можно как нить сделать запрос, и не ждать ответа, а выполнять код дальше.
А когда приходит ответ, дергнуть коллбек какой?
Библиотека по ссылке - оно и есть, не понимаю чем эти требования отличаются от тех, что в вашем первом сообщении.

Офлайн

#6 Апрель 6, 2013 09:26:44

ByGreez
От:
Зарегистрирован: 2011-12-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Асинхронное выполнение функций, callback'и

Проблема в том, что использую сторонние библиотеки. И переписывать их не очень хочется.
Хотя наверно придется отказаться от них, и гонять запросы самому или заюзать весь gevent. Хотя можно попробовать пропатчить urllib.
Спасибо за подсказки!



Отредактировано ByGreez (Апрель 6, 2013 09:27:55)

Офлайн

#7 Апрель 6, 2013 22:37:50

qoqenator
От:
Зарегистрирован: 2007-08-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Асинхронное выполнение функций, callback'и

Вы видимо не вкурсе про gevent.monkey.patch_all ?
https://github.com/surfly/gevent/blob/gevent013/examples/concurrent_download.py
Замените urllib на ваши библиотеки и работайте с ними асинхронно. Я надеюсь, они юзают питоновский сокет, а не pycurl?



Офлайн

#8 Апрель 6, 2013 23:21:26

ByGreez
От:
Зарегистрирован: 2011-12-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Асинхронное выполнение функций, callback'и

qoqenator
Замените urllib на ваши библиотеки и работайте с ними асинхронно. Я надеюсь, они юзают питоновский сокет, а не pycurl?
Не все, некоторые придется переписать.
да и магии многовато)

Делаю так: ThreadPool на 10 мест, потом map_async с callback'ом когда все готово.
А в сам pool пихаю функции которые дергают интеграции.

Если не получится, буду пробовать патчить.

Спасибо.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version