我编写了一个小脚本,用于根据提供的票证ID列表查询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
答案 0 :(得分:0)
我以前从未使用过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可以解决这一问题。这很可能避免过多的通话。您的代码需要更长的时间才能运行,但不会达到速率限制。