WEB开发网
开发学院软件开发Python 使用 Python 进行线程编程 阅读

使用 Python 进行线程编程

 2008-09-30 12:46:16 来源:WEB开发网   
核心提示: URL 获取序列import urllib2import timehosts = ["http://yahoo.com", "http://google.com", "http://amazon.com","http:/

URL 获取序列

    import urllib2
    import time
    
    hosts = ["http://yahoo.com", "http://google.com", "http://amazon.com",
    "http://ibm.com", "http://apple.com"]
    
    start = time.time()
    #grabs urls of hosts and prints first 1024 bytes of page
    for host in hosts:
     url = urllib2.urlopen(host)
     print url.read(1024)
    
    print "Elapsed Time: %s" % (time.time() - start)

在运行以上示例时,您将在标准输出中获得大量的输出结果。但最后您将得到以下内容:

    Elapsed Time: 2.40353488922 

让我们仔细分析这段代码。您仅导入了两个模块。首先,urllib2 模块减少了工作的复杂程度,并且获取了 Web 页面。然后,通过调用 time.time(),您创建了一个开始时间值,然后再次调用该函数,并且减去开始值以确定执行该程序花费了多长时间。最后分析一下该程序的执行速度,虽然“2.5 秒”这个结果并不算太糟,但如果您需要检索数百个 Web 页面,那么按照这个平均值,就需要花费大约 50 秒的时间。研究如何创建一种可以提高执行速度的线程化版本:

URL 获取线程化

     #!/usr/bin/env python
     import Queue
     import threading
     import urllib2
     import time
     
     hosts = ["http://yahoo.com", "http://google.com", "http://amazon.com",
     "http://ibm.com", "http://apple.com"]
     
     queue = Queue.Queue()
     
     class ThreadUrl(threading.Thread):
     """Threaded Url Grab"""
      def __init__(self, queue):
       threading.Thread.__init__(self)
       self.queue = queue
     
      def run(self):
       while True:
        #grabs host from queue
        host = self.queue.get()
      
        #grabs urls of hosts and prints first 1024 bytes of page
        url = urllib2.urlopen(host)
        print url.read(1024)
      
        #signals to queue job is done
        self.queue.task_done()
     
     start = time.time()
     def main():
     
      #spawn a pool of threads, and pass them queue instance
      for i in range(5):
       t = ThreadUrl(queue)
       t.setDaemon(True)
       t.start()
       
      #populate queue with data 
       for host in hosts:
        queue.put(host)
     
      #wait on the queue until everything has been processed  
      queue.join()
     
     main()
     print "Elapsed Time: %s" % (time.time() - start)

上一页  1 2 3 4 5 6  下一页

Tags:使用 Python 进行

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接