多线程时减少API获取请求



我试图通过两个方法多次调用API的get方法,以获得一组有效的URLS端点

方法1:通过循环多次进行一次简单调用

方法2:多个线程在每个线程中多次调用API

当调用这两个方法时,我得到的HTTP:200响应与我调用函数的次数一样多

但是,当检查服务的日志时,我可以看到更少的调用次数,即每次通过方法2(多线程(调用get函数时显示的消息计数

在python中使用多线程时,发出的调用明显高于日志中收到的调用,这对我来说毫无意义,因为我收到的所有响应都是正确的

我正在调用的服务是URL Shortner服务,我正在调用端点中的缩短URL

方法1:

with open('url_big_list.csv') as file_obj:
reader_obj = csv.reader(file_obj)
for row in reader_obj:
for i in range(50):
url='https://so2.in/'+row[0]
print(url)
headers = {'Content-Type': 'application/json'}
response = requests.get(url,verify=False)

方法2

def multiThreadRun(no_of_calls_per_thread,url_list):
for i in range(no_of_calls_per_thread):
url=random.choice(url_list)
print(url)
headers = {'Content-Type': 'application/json'}
response = requests.get(url,verify=False)
no_of_threads = 10
thread_counter = 0
no_of_api_call_per_thread=100
temp = ""
thread_list=[]
while(thread_counter < no_of_threads):
print("thread no :", thread_counter)
temp = "t"+str(thread_counter)
temp = threading.Thread(target=multiThreadRun(no_of_api_call_per_thread,url_list))
thread_list.append(temp)
thread_counter = thread_counter+1

感谢您提前帮助

在第二个例子中的while循环之后,您需要这样的东西来确保所有线程在退出程序之前都已完成:

for thread in thread_list:
thread.join()

这将允许您等待,直到所有线程都完成。他们完成什么订单并不重要。如果在调用联接时已经完成了一个操作,它将立即返回,否则将等待。一旦你完成了列表,你就会知道他们都完成了。

最新更新