本文整理汇总了Python中rx.subjects.Subject.throttle_last方法的典型用法代码示例。如果您正苦于以下问题:Python Subject.throttle_last方法的具体用法?Python Subject.throttle_last怎么用?Python Subject.throttle_last使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类rx.subjects.Subject
的用法示例。
在下文中一共展示了Subject.throttle_last方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: WSHandler
# 需要导入模块: from rx.subjects import Subject [as 别名]
# 或者: from rx.subjects.Subject import throttle_last [as 别名]
class WSHandler(WebSocketHandler):
orgs = conf.orgs
def check_origin(self, origin):
#Override to enable support for allowing alternate origins.
return True
def get_org_repos(self, org):
"""request the repos to the GitHub API"""
http_client = AsyncHTTPClient()
response = http_client.fetch(GIT_ORG + org, headers=headers, method="GET")
return response
def on_message(self, message):
obj = json_decode(message)
self.subject.on_next(obj['term'])
def on_close(self):
# Unsubscribe from observable
# will stop the work of all observable
self.combine_latest_sbs.dispose()
print("WebSocket closed")
def open(self):
print("WebSocket opened")
self.write_message("connection opened")
def send_response(x):
self.write_message(json.dumps(x))
def on_error(ex):
print(ex)
self.subject = Subject()
user_input = self.subject.throttle_last(
1000 # Given the last value in a given time interval
).start_with(
'' # Immediately after the subscription sends the default value
).filter(
lambda text: not text or len(text) > 2
)
interval_obs = Observable.interval(
60000 #refresh the value every 60 Seconds for periodic updates
).start_with(0)
self.combine_latest_sbs = user_input.combine_latest(
interval_obs, lambda input_val, i: input_val
).do_action(
lambda x: send_response('clear')
).flat_map(
self.get_data
).subscribe(send_response, on_error)
def get_info(self,req):
"""managing error codes and returning a list of json with content"""
if req.code == 200:
jsresponse = json.loads(req.body)
return jsresponse
elif req.code == 403:
print("403 error")
jsresponse = json.loads(req.body)
return json.dumps("clear")
else:
return json.dumps("failed")
def get_data(self,query):
""" query the data to the API and return the contet filtered"""
return Observable.from_list(
self.orgs
).flat_map(
lambda name: Observable.from_future(self.get_org_repos(name))
).flat_map(
lambda x: Observable.from_list(
self.get_info(x) #transform the response to a json list
).filter(
lambda val: (val.get("description") is not None
and (val.get("description").lower()).find(query.lower())!= -1)
or (val.get("language") is not None
and (val.get("language").lower()).find(query.lower())!= -1)
).take(10) #just take 10 repos from each org
).map(lambda x: {'name': x.get("name"),
'stars': str(x.get("stargazers_count")),
'link': x.get("svn_url"),'description': x.get("description"),
'language': x.get("language")})
示例2: WSHandler
# 需要导入模块: from rx.subjects import Subject [as 别名]
# 或者: from rx.subjects.Subject import throttle_last [as 别名]
class WSHandler(WebSocketHandler):
urls = ['https://lenta.ru/rss/top7',
'http://wsrss.bbc.co.uk/russian/index.xml']
def get_rss(self, rss_url):
http_client = AsyncHTTPClient()
return http_client.fetch(rss_url, method='GET')
def open(self):
print("WebSocket opened")
# Subject одновременно и observable, и observer
self.subject = Subject()
def send_response(x):
self.write_message(json.dumps(x))
def on_error(ex):
print(ex)
user_input = self.subject.throttle_last(
1000 # На заданном временном промежутке получать последнее значение
).start_with(
'' # Сразу же после подписки отправляет значение по умолчанию
).filter(
lambda text: not text or len(text) > 2
)
interval_obs = Observable.interval(
60000 # Отдает значение раз в 60с (для периодического обновления)
).start_with(0)
# combine_latest собирает 2 потока из запросов пользователя и временных
# интервалов, срабатывает на любое сообщение из каждого потока
self.combine_latest_sbs = user_input.combine_latest(
interval_obs, lambda input_val, i: input_val
).do_action( # Срабатывает на каждый выпущенный элемент
# Отправляет сообщение для очистки списка на фронтэнд
lambda x: send_response('clear')
).flat_map(
# В цепочку встраивается observable для получения списка
self.get_data
).subscribe(send_response, on_error)
# Создается подписка; вся цепочка начинает работать только в этот момент
def get_data(self, query):
# Observable создается из списка url
return Observable.from_list(
self.urls
).flat_map(
# Для каждого url создается observable, который загружает данные
lambda url: Observable.from_future(self.get_rss(url))
).flat_map(
# Полученные данные парсятся, из них создается observable
lambda x: Observable.from_list(
feedparser.parse(x.body)['entries']
).filter(
# Фильтрует по вхождению запроса в заголовок или текст новости
lambda val, i: query in val.title or query in val.summary
).take(5) # Берем только по 5 новостей по каждому url
).map(lambda x: {'title': x.title, 'link': x.link,
'published': x.published, 'summary': x.summary})
# Преобразует данные для отправки на фронтэнд
def on_message(self, message):
obj = json_decode(message)
# Отправляет сообщение, который получает user_input
self.subject.on_next(obj['term'])
def on_close(self):
# Отписаться от observable; по цепочке остановит работу всех observable
self.combine_latest_sbs.dispose()
print("WebSocket closed")