Python 如何加快request post 请求

avatar
import requests
import csv

url= ['exmpale.com']
header = {'1234567'}

with open('test.csv', 'r') as f:
   reader = csv.reader(f)
   for row in reader:
      print(row)
      requests.post(url, json=row, headers=header)

目前我的csv里有30k的记录,以上的代码每个post请求是大约5秒。处理完要好几个小时。请问有办法加快post 请求吗?

4 条评论
avatar
tomoya92 发布于 2 个月前
  0  

请问,你用浏览器打开你csv里的url到响应完要多少秒?

avatar
tomoya92 发布于 2 个月前
  0  

如果浏览器访问也大概在5s一个的话,你可以考虑用一下多线程

import requests
import threading

def get_stock(code):
    url = 'http://hq.sinajs.cn/list=' + code
    resp = requests.get(url)
    print('%s\n' % resp.text)

#多线程异步,加速抓取
#根据有几个股票代码,就创建几个线程
codes = ['sz000878', 'sh600993', 'sz000002', 'sz002230']
threads = [threading.Thread(target=get_stock, args=(code, )) for code in codes]
#Thread创建线程实例
'''
threads=[ ]
for code in codes:
    thread=threading.Thread(target=get_stock,args=(code, ))
    threads.append(thread)
'''
for t in threads:
    t.start()  #启动一个线程
for t in threads:
    t.join()  #等待每个线程执行结束

来自:https://blog.csdn.net/cymy001/article/details/78218024

avatar
tosma 发布于 2 个月前
  0  

@tomoya92

import requests
import csv
import threading

url= ['exmpale.com']
header = {'1234567'}

with open('test.csv', 'r') as f:
   reader = csv.reader(f)
   for row in reader:
      print(row)
  
      def postRequest():
        # 发送请求
        postapi = requests.post(url, json=row, headers=header)
        # 获取请求响应
        print(postapi.text)

      threads = []
      # 创建2个线程
      for i in range(2):
          # 针对函数创建线程
          t = threading.Thread(target=postRequest, args=())
          # 把创建的线程加入线程组
          threads.append(t)

      if __name__ == '__main__':
          # 启动线程
          for i in threads:
              i.setDaemon(True)
              i.start()
              # keep thread
          for i in threads:
              i.join()

我创建了多线程,但是两个线程都处理着一样的数据
比如我的csv 有
John
Jerry
Kelly

输出结果:
John 线程1
John 线程2
Jerry
Jerry
...

avatar
tomoya92 发布于 2 个月前
  0  

你读取csv的时候,有下标吧,如果你创建多个线程,就通过取模来区分不就好了

比如分2个线程,index % 2 == 0 放在一个线程里处理 index % 2 == 1 放在另一个线程里处理

添加一条评论 请尽量发布对他人有帮助的评论

登录后可发布评论

登录 | Github登录