Skip to content

Commit

Permalink
add use case for VkRequestsPool (#349)
Browse files Browse the repository at this point in the history
  • Loading branch information
YorkDW committed Sep 11, 2020
1 parent ae6584d commit b5e0a11
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
19 changes: 19 additions & 0 deletions examples/requests_pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,25 @@ def main():

print(friends)

"""Пример использования пула в виде объекта. Такой пул можно
передать в качестве параметра"""

friends = {}

pool = vk_api.VkRequestsPool(vk_session)
for user_id in [1, 183433824]:
friends[user_id] = pool.method('friends.get', {
'user_id': user_id,
'fields': 'photo'
})

pool.execute()

for key, value in friends.items():
friends[key] = value.result

print(friends)

""" Следующий пример - более простая версия предыдущего
В friends будет записан тот же самый результат, что и в прошлом примере.
Expand Down
12 changes: 11 additions & 1 deletion vk_api/requests_pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,12 @@ class VkRequestsPool(object):
Позволяет сделать несколько обращений к API за один запрос
за счет метода execute.
Служит как менеджер контекста: запросы к API добавляются в
Варианты использованя:
- В качестве менеджера контекста: запросы к API добавляются в
открытый пул, и выполняются при его закрытии.
- В качестве объекта пула. запросы к API дабвляются по одному
в пул и выполняются все вместе при выполнении метода execute()
:param vk_session: Объект :class:`VkApi`
"""
Expand Down Expand Up @@ -110,6 +114,11 @@ def method(self, method, values=None):
return result

def execute(self):
"""
Выполняет все находящиеся в пуле запросы и отчищает пул.
Необходим для использования пула-объекта.
Для пула менеджера контекста вызывается автоматически.
"""
for i in range(0, len(self.pool), 25):
cur_pool = self.pool[i:i + 25]

Expand All @@ -136,6 +145,7 @@ def execute(self):
current_result.result = current_response
else:
current_result.error = next(response_errors_iter)
self.pool = []


def check_one_method(pool):
Expand Down

0 comments on commit b5e0a11

Please sign in to comment.