问题:检查超过1000个网址的列表,并获取网址返回码(status_code)。
我拥有的脚本有效,但速度很慢。
我认为必须有一种更好的pythonic(更漂亮)的方法,在该方法中我可以产生10或20个线程来检查网址并收集共振。(即:
200 -> www.yahoo.com
404 -> www.badurl.com
...
www.example.com
www.yahoo.com
www.testsite.com
....
import requests
with open("url10.txt") as f:
urls = f.read().splitlines()
print(urls)
for url in urls:
url = 'http://'+url #Add http:// to each url (there has to be a better way to do this)
try:
resp = requests.get(url, timeout=1)
print(len(resp.content), '->', resp.status_code, '->', resp.url)
except Exception as e:
print("Error", url)
挑战: 通过多处理提高速度。
但这是行不通的。我收到以下错误消息:(注意:我不确定我是否正确实现了这一点)
AttributeError: Can't get attribute 'checkurl' on <module '__main__' (built-in)>
-
import requests
from multiprocessing import Pool
with open("url10.txt") as f:
urls = f.read().splitlines()
def checkurlconnection(url):
for url in urls:
url = 'http://'+url
try:
resp = requests.get(url, timeout=1)
print(len(resp.content), '->', resp.status_code, '->', resp.url)
except Exception as e:
print("Error", url)
if __name__ == "__main__":
p = Pool(processes=4)
result = p.map(checkurlconnection, urls)
在这种情况下,您的任务是I / O绑定的,而不是处理器绑定的-
网站答复所需的时间比CPU通过脚本(不包括TCP请求)循环一次所花费的时间更长。这意味着您不会并行执行此任务而获得任何提速(这是这样multiprocessing
做的)。您想要的是多线程。实现这一目标的方法是使用少量文献记载的文件,也许是名字不好用multiprocessing.dummy
:
import requests
from multiprocessing.dummy import Pool as ThreadPool
urls = ['https://www.python.org',
'https://www.python.org/about/']
def get_status(url):
r = requests.get(url)
return r.status_code
if __name__ == "__main__":
pool = ThreadPool(4) # Make the Pool of workers
results = pool.map(get_status, urls) #Open the urls in their own threads
pool.close() #close the pool and wait for the work to finish
pool.join()
有关Python中的多处理与多线程的示例,请参见此处。
问题内容: 我有一个可以用SwiftyJSON解析的json: 完美运作。 但是我无法遍历它。我尝试了两种方法,第一种是 XCode不接受for循环声明。 第二种方法: XCode不接受if语句。 我究竟做错了什么 ? 问题答案: 如果要遍历数组,请尝试: 至于第二种方法,返回 非 数组,应该使用:
问题内容: 我想用这样的for循环遍历$ scope变量。在此示例中,$ scope对象包括一个包含 5个对象的对象 帐户 ,这些对象的名称是从1到5的数字。每个对象都有一个名称。 问题: $ scope.accounts.i 是 未定义的, 因为在 $ scope 变量内我不算为变量。它算作字母i,因此我看不到有机会用for循环遍历作用域。当我在$ scope变量周围使用“”时,它将仅显示为纯h
问题内容: 我有一个来自我的应用程序的时间戳值。用户可以在任何给定的本地TimeZone中。 由于此日期用于假定给定时间始终为格林尼治标准时间的Web服务,因此我需要将用户的参数从(EST)转换为(GMT)。这是一个关键点:用户忽略了自己的TZ。他输入了要发送给WS的创建日期,所以我需要的是: 用户输入: 2008年5月1日下午6:12(美国东部标准时间) WS的参数必须为:2008年5月1日下午
问题内容: 我有一个Map如下所示的bean: 这ftqSet适合以下数据结构: 在我的测试JSP文件中,我一直在尝试使用来访问数据 : 但是它没有输出${f.feedId}。为什么会这样呢?我将如何访问该结构的各个元素,以便创建一个漂亮的表? 问题答案: 的每次迭代中给出了一个实例,它反过来又和getValue()方法。这与在普通Java中进行操作类似。 例如 在的情况下, 的回报, ,所以你需
我们正在使用AWS SAM构建API。在CodeStar中的Lambda节点模板上构建。事情一直进展顺利,直到我们的模板。yml文件变得太大了。每当推送代码并且CloudFormation开始执行更改集并为SAMendpoint创建堆栈时,它就会失败并回滚到上一次成功构建。 似乎我们有太多的资源超过了每个堆栈的云形成限制。 我尝试拆分模板文件,并编辑构建规范来处理两个模板文件,执行两个AWS云形成
问题内容: 我正在寻找一种数学解决方案,该解决方案可以处理真实(长,大,大,风暴)数字。我还没有发现任何东西,但是我不想现在这个问题还没有解决。我正在寻找一种简单的Number解决方案,例如MicrosoftExcelPrecision(30位十进制)或BigInteger(Java)解决方案。当然是用Java语言编写的。 问题答案: BigInt现在是Firefox和Chrome的一部分; 你不
问题内容: 要使用带有大量数字(100,000+)的Fermat基本性测试时需要的[模幂,它需要进行一些非常大的计算。 当我将两个大数相乘时(例如:62574和62574),PHP似乎将结果强制转换为浮点数。获取该模量的值将返回奇怪的值。 有什么方法可以使PHP正确执行这些计算?另外,还有另一种方法可以找到适用于大量数值的模量值吗? 问题答案: 出于某种原因,PHP中有两个处理任意长度/精度数字的
我有四个UITextFields我想在UIAlertView中使用,目前这是它看起来的样子 我希望能够做的是限制每个框为4个字符,每个字段一旦达到4个字符的限制,那么我希望下一个UITextField成为第一个响应器。 我也希望能够做到这一点反过来,所以如果字符正在删除,一旦没有字符可用在第二个字段,到第一个,并开始删除,等等。