【发布时间】:2021-08-06 09:02:12
【问题描述】:
我正在尝试使用 python 多线程发布请求以将哈希发送到malwarebazaar。 第一次我正在从文件中读取哈希值,然后我试图对其进行多线程处理,但我被卡住了 我的代码没有使用所有的哈希,哪里出错了?
import re
import json
import sys
import requests
from time import time
from concurrent.futures import ThreadPoolExecutor, as_completed
f=open('hashes.txt')
lines= f.readlines()
url='https://mb-api.abuse.ch/api/v1'
array=[]
for line in lines:
line=line.replace('\n','')
data={'query':'get_info','hash':line}
array.append(data)
#print(array)
#start=time()
print(url)
def function(url):
html = requests.post(url, data=array,stream=True)
print(html.json())
return html
start = time()
processes = []
with ThreadPoolExecutor(max_workers=10) as executor:
for url in url:
processes.append(executor.submit(function, url))
#for task in as_completed(processes):
# print(task.result())
print(f'Time taken: {time() - start}')
#c = Counter(array)
#print(c)
【问题讨论】:
-
你还没有解释发生了什么问题
-
function中的异常不在此代码中处理,因为从不轮询生成的期货。取消注释包含task.result()的循环以查看问题所在。 -
你怎么用
stream=True?如果在发出请求时将流设置为 True,则除非您消耗所有数据或调用 Response.close,否则 Requests 无法将连接释放回池中。这可能导致连接效率低下。如果您发现自己在使用 stream=True 时部分读取了请求正文(或根本不读取它们),您应该在 with 语句中发出请求以确保它始终关闭。示例:with requests.get(url, data=array, stream=True) as r: -
@roganjosh 它从文件
print(url) def function(url): html = requests.post(url, data=x,stream=True) print(html.json()) return html中获取随机哈希值 -
@user56700 我从我的请求中得到了答案,但它需要随机散列
print(url) def function(url): html = requests.post(url, data=x,stream=True) print(html.json()) return html和processes = [] with ThreadPoolExecutor(max_workers=10) as executor: for x in array: processes.append(executor.submit(function, url))
标签: python multithreading python-multithreading