Есть ли более эффективный способ написания сценария этого вызова API с использованием zenpy? - PullRequest
0 голосов
/ 02 мая 2019

Я написал небольшой скрипт для запроса в Zendesk API комментариев к заявкам на основе предоставленного списка идентификаторов заявок.

У меня небольшой опыт использования этого модуля, и я хочу быть уверен, что мой метод цикла вызывает API-интерфейс наименьшее количество раз. Я ищу максимальную производительность в целом, и у меня есть догадка, что мой итеративный цикл - не лучший способ сделать это.

Я просмотрел документы zenpy, а также рекомендации Zendesk API и внедрил упреждающее ограничение скорости в zenpy, чтобы избежать превышения ограничения скорости. Я также видел боковую загрузку как способ предотвратить чрезмерные вызовы API, но не могу четко определить, как реализовать это в моем коде: (

import zenpy, datetime, zdcreds

zenpy_client = zenpy.Zenpy(proactive_ratelimit=700, **zdcreds.creds)

#later this will pull from a csv or excel range
ticket_list = [799380, 805404] 

pre_df = {'ticket_id':[], 'comment_text':[], 'author_id':[]}

for t in ticket_list:
    for comment in zenpy_client.tickets.comments(ticket=t):
        pre_df['ticket_id'].append(t)
        pre_df['comment_text'].append(comment.body)
        pre_df['author_id'].append(comment.author)

#will output data to file

1 Ответ

0 голосов
/ 02 мая 2019

Я никогда не использовал zenpy прежде, но я могу поделиться своим опытом, что при вызове API или поиске сайтов первым подходом является добавление времени ожидания между каждым вызовом.Так, чтобы привести пример с вашим кодом, это может быть что-то вроде этого:

import zenpy, datetime, zdcreds, time, random

zenpy_client = zenpy.Zenpy(proactive_ratelimit=700, **zdcreds.creds)

#later this will pull from a csv or excel range
ticket_list = [799380, 805404] 

pre_df = {'ticket_id':[], 'comment_text':[], 'author_id':[]}

for t in ticket_list:
    for comment in zenpy_client.tickets.comments(ticket=t):
        pre_df['ticket_id'].append(t)
        pre_df['comment_text'].append(comment.body)
        pre_df['author_id'].append(comment.author)
        time.sleep(random.randint(2,5))


#will output data to file

Так что это добавит случайное время ожидания между 2-5 секундами к вашему коду.Вы можете проверить некоторые цифры и посмотреть, какая из них лучше работает, чтобы избежать ограничений скорости.Вы также можете сохранить постоянное время сна, но некоторые API могут поймать это, я думаю.Это, скорее всего, позволит избежать чрезмерных звонков.Ваш код будет выполняться дольше, но не достигнет ограничения скорости.

...