gpt4 book ai didi

python - 请求线程卡在Python中

转载 作者:行者123 更新时间:2023-12-01 09:22:03 25 4
gpt4 key购买 nike

我对 python 多处理模块有一个严重的问题我正在构建一个漏洞管理工具。它获取 Linux 软件包列表,然后通过调用 RedHat API 搜索每个软件包的可用 CVE。我正在使用 multiprocessing.dummy 来实现线程池来实现这项工作。问题是,在成功调用 API 后,我的脚本挂起/卡住,我无法对其进行调试。这是我的一段代码

from multiprocessing.dummy import Pool as ThreadPool 

def check_vulnerability(package):
done.append(package)
try:
time.sleep(1)
headers = {'User-agent' : 'Mozilla/11.0'}
with requests_retry_session() as s:
s.headers.update(headers)
print "Processing package "+package+"=>"+str(float(len(done))/len(packages)*100)+"%"
req = requests.get('https://access.redhat.com/labs/securitydataapi/cve.xml?package='+package, headers = headers, verify=True)
if req.text != '':
soup = BeautifulSoup(req.text, 'xml')
else:
pass
except Exception as e:
#print "#################################################################################"
#print e
#print packages"#################################################################################"
#Some code to process req.text

def main():
start_time = time.time()
global packages
packages = fetch_packages_rpm() #list of strings ()
p = ThreadPool(int(results.thread))
all = p.map(check_vulnerability, packages)

在一些成功的打印之后,我的脚本挂起并且无法调试(我认为线程正在等待 ssl 握手或类似的东西,并且它位于 waiter.aquire() 中)。非常感谢任何形式的帮助

最佳答案

我找到了解决这个问题的方法。问题在于该线程仍然处于事件状态,正在等待与服务器进行 SSL 握手。我所做的是使用线程而不是带有 multiprocessing.dummy 的线程池。然后,当服务器在超时时间内没有响应时,使用带有超时的 join() 来终止线程。

        for index, package in enumerate(packages):
t = threading.Thread(target=check_vulnerability, args=(package,))
threads.append(t)
t.daemon = True
t.start()
t.join(0.5)
t.isAlive()

关于python - 请求线程卡在Python中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50738072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com