NotZhang 最近的时间轴更新
NotZhang

NotZhang

V2EX 第 643964 号会员,加入于 2023-08-16 18:46:21 +08:00
今日活跃度排名 15657
NotZhang 最近回复了
55 天前
回复了 gzldc 创建的主题 Python 如何使用 Python 最快实现 1w 个 http 请求
Python 实现

import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
import time

def send_request(payload):
"""发送 HTTP POST 请求到指定的 URL"""
try:
response = requests.post('你的 URL', json=payload)
# 注意:这里我们不处理响应内容
except Exception as e:
print(f"请求发送异常: {e}")

def load_payloads(file_path):
"""从文件中读取每行作为单独的 payload"""
with open(file_path, 'r') as file:
return [line.strip() for line in file]

def main(file_path, max_workers=20):
"""主函数:读取 payloads 并并发发送请求"""
payloads = load_payloads(file_path)
start_time = time.time()
with ThreadPoolExecutor(max_workers=max_workers) as executor:
# 将每个 payload 提交到线程池
future_to_payload = {executor.submit(send_request, payload): payload for payload in payloads}

# 等待所有的请求完成(这一步是可选的,只是为了能够处理可能的异常)
for future in as_completed(future_to_payload):
payload = future_to_payload[future]
try:
future.result() # 如果请求产生异常,这里会抛出
except Exception as exc:
print(f'{payload} 生成了一个异常: {exc}')

print(f"所有请求发送完毕,耗时:{time.time() - start_time:.2f}秒")

if __name__ == "__main__":
main("yourfile.txt")
55 天前
回复了 gzldc 创建的主题 Python 如何使用 Python 最快实现 1w 个 http 请求
go 实现

package main

import (
"bufio"
"fmt"
"net/http"
"os"
"sync"
)

// worker 是用来发起 HTTP 请求的协程
func worker(payloads <-chan string, wg *sync.WaitGroup) {
defer wg.Done()
for payload := range payloads {
// 这里是你的 HTTP 请求逻辑
_, err := http.Post("你的 URL", "application/json", strings.NewReader(payload))
if err != nil {
// 处理错误,根据需要记录或忽略
fmt.Println("Error sending request:", err)
continue
}
// 这里不处理响应体
}
}

func main() {
var wg sync.WaitGroup

// 创建一个 channel 来传递 payload
payloads := make(chan string, 100) // 缓冲区大小可以根据需要调整

// 设置并发数,可以根据你的机器性能和网络条件调整
for i := 0; i < 10; i++ {
wg.Add(1)
go worker(payloads, &wg)
}

// 打开文件
file, err := os.Open("yourfile.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()

// 读取文件中的每一行作为 payload
scanner := bufio.NewScanner(file)
for scanner.Scan() {
payloads <- scanner.Text()
}
close(payloads) // 关闭 channel

// 等待所有的 worker 完成
wg.Wait()

if err := scanner.Err(); err != nil {
fmt.Println("Error reading from file:", err)
}
}
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3318 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 13:43 · PVG 21:43 · LAX 06:43 · JFK 09:43
Developed with CodeLauncher
♥ Do have faith in what you're doing.