LINUX.ORG.RU

питун, gevent и асинхронное выполнение

 


0

2

сап, лор, есть один Jabber-транспорт, написанный с совершенно нулевыми знаниями питуна. (тупо 1ый раз взялся за язык)

вообщем, есть функция, которая получает инфу от какого-то апи, пусть это будет

def api_query(self, method, params): 
 ...
 resp = urllib2.urlopen(url)
 ans = resp.read()
 return ans

функция у нас вызывается для получения информации. т.е. нужно получить от АПИ какуюто инфу и работать с ней дальше.

я правильно понимаю, что в этом случае нужно использовать gevent+callback?
т.е. в самой функции api_query как-то нужно засунуть обработку полученной инфы вызовом нужной функции, или как это кошерно сделать?

★★★★★

написанный с совершенно нулевыми знаниями питуна. (тупо 1ый раз взялся за язык)

Начни с английского языка. Или русского - трудно понять, с чем у тебя большие проблемы.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

есть хандлер входящего Jabber-сообщения в транспорт, в нём есть HTTP-запрос к API через urllib2, если API повисло или не отвечает, другие входящие сообщения транспорт отказывается обрабатывать

snoopcat ★★★★★
() автор топика
Ответ на: комментарий от snoopcat

насколько я понимаю, это возникает из-за

resp.read()

т.к. read() — блокирующая операция в пуитиуне

snoopcat ★★★★★
() автор топика
Последнее исправление: snoopcat (всего исправлений: 2)

рутнон правильно. а путин - это не в тему вообще.

anonymous
()

я правильно понимаю, что в этом случае нужно использовать gevent+callback?

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

в последий версиях путина уже встроено asyncio, а в предпоследний — можно пакетом установить

user_id_68054 ★★★★★
()

вообщем, вынес в отдельные треды обработчики отправки и приёма сообщений, вроде всё нарм

snoopcat ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.