Python中For循环外的处理结果

2024-09-30 22:16:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的代码,通过urllib获取页面:

browser_list= ['Chrome','Mozilla','Safari','Internet Explorer','Opera']
user_string_url="http://www.useragentstring.com/pages/"
for eachBrowser in browser_list:
    result= urllib2.urlopen(urljoin(user_string_url,eachBrowser))

现在我可以通过result.read()读取结果,但我想知道是否所有这些功能都可以在for循环之外完成。因为要获取的其他URL将等待所有结果处理完毕。你知道吗

我想在for循环外处理result。这能做到吗?你知道吗


Tags: 代码browserurlmozillaforstring页面result
3条回答

您可以为此使用线程:

import threading
import urllib2
from urlparse import urljoin

def worker(url):
    res = urllib2.urlopen(url)
    data = res.read()
    res.close()

browser_list = ['Chrome', 'Mozilla', 'Safari', 'Internet Explorer', 'Opera']
user_string_url='http://www.useragentstring.com/'
for browser in browser_list:
    url = urljoin(user_string_url, browser)
    threading.Thread(target=worker,args=[url]).start()

 # wait for everyone to complete
 for thread in threading.enumerate():
     if thread == threading.current_thread(): continue
     thread.join()

做这件事的方法之一可能是把结果写成一本字典。你能做的是: 结果={}

for eachBrowser in browser_list:
result[eachBrowser]= urllib2.urlopen(urljoin(user_string_url,eachBrowser))

并在循环外使用result[BrowserName]。 希望这有帮助。你知道吗

如果您只是想访问循环外的所有结果,只需将所有结果附加到数组或字典中,如上面所示。你知道吗

或者如果你想加速你的任务,试试multithreading。你知道吗

import threading
class myThread (threading.Thread):
    def __init__(self, result):
        threading.Thread.__init__(self)
        self.result=result
    def run(self):
       // process your result(as self.result) here

browser_list= ['Chrome','Mozilla','Safari','Internet Explorer','Opera']
user_string_url="http://www.useragentstring.com/pages/"
for eachBrowser in browser_list:
    result= urllib2.urlopen(urljoin(user_string_url,eachBrowser))
    myThread(result).start() // it will start processing result on another thread and continue loop without any waiting

这是一种简单的多线程方式。它可能会中断取决于您的结果处理。在尝试之前,请考虑阅读documentation和一些examples。你知道吗

相关问题 更多 >