我想知道如何优化我在 Python 中作为 Web 服务实现的链接检查器。我已经缓存了对每 24 小时过期的数据库的响应。每天晚上我都有一个刷新缓存的 cron 作业,因此缓存实际上永远不会过时。
当然,如果我截断缓存,或者正在检查的页面有很多不在缓存中的链接,事情就会变慢。我不是计算机科学家,所以我想要一些关于如何使用线程或进程来优化它的建议和具体帮助。
我想通过将每个 url 请求为后台进程(伪代码)来进行优化:
# The part of code that gets response codes not in cache...
responses = {}
# To begin, create a dict of url to process in background
processes = {}
for url in urls:
processes[url] = Popen("curl " url + " &")
# Now loop through again and get the responses
for url in processes
response = processes[url].communicate()
responses[url] = response
# Now I have responses dict which has responses keyed by url
对于我的大多数用例,这将脚本的时间减少了至少 1/6,而不是仅仅循环遍历每个 url 并等待每个响应,但我担心脚本运行的服务器超载。我考虑过使用队列,一次可能有 25 个左右的批次。
多线程会是更好的整体解决方案吗?如果是这样,我将如何使用多线程模块来做到这一点?