<bdo id='YktUr'></bdo><ul id='YktUr'></ul>

<tfoot id='YktUr'></tfoot>

<small id='YktUr'></small><noframes id='YktUr'>

  • <legend id='YktUr'><style id='YktUr'><dir id='YktUr'><q id='YktUr'></q></dir></style></legend>

    <i id='YktUr'><tr id='YktUr'><dt id='YktUr'><q id='YktUr'><span id='YktUr'><b id='YktUr'><form id='YktUr'><ins id='YktUr'></ins><ul id='YktUr'></ul><sub id='YktUr'></sub></form><legend id='YktUr'></legend><bdo id='YktUr'><pre id='YktUr'><center id='YktUr'></center></pre></bdo></b><th id='YktUr'></th></span></q></dt></tr></i><div id='YktUr'><tfoot id='YktUr'></tfoot><dl id='YktUr'><fieldset id='YktUr'></fieldset></dl></div>

      1. python实现多线程采集的2个代码例子

        时间:2023-12-16
          <bdo id='rJ5X3'></bdo><ul id='rJ5X3'></ul>
            <legend id='rJ5X3'><style id='rJ5X3'><dir id='rJ5X3'><q id='rJ5X3'></q></dir></style></legend><tfoot id='rJ5X3'></tfoot>
            <i id='rJ5X3'><tr id='rJ5X3'><dt id='rJ5X3'><q id='rJ5X3'><span id='rJ5X3'><b id='rJ5X3'><form id='rJ5X3'><ins id='rJ5X3'></ins><ul id='rJ5X3'></ul><sub id='rJ5X3'></sub></form><legend id='rJ5X3'></legend><bdo id='rJ5X3'><pre id='rJ5X3'><center id='rJ5X3'></center></pre></bdo></b><th id='rJ5X3'></th></span></q></dt></tr></i><div id='rJ5X3'><tfoot id='rJ5X3'></tfoot><dl id='rJ5X3'><fieldset id='rJ5X3'></fieldset></dl></div>

          • <small id='rJ5X3'></small><noframes id='rJ5X3'>

              <tbody id='rJ5X3'></tbody>

                  下面是详细的攻略:

                  Python实现多线程采集

                  前言

                  对于一些需要收集数据的任务,并发的采集方式无疑是对效率的一大提升。Python语言提供了多线程编程的支持,本文将会介绍两种使用Python实现多线程采集的方式并提供相应的代码。

                  代码实现

                  代码一

                  第一种实现方式相对来说比较简单理解,我们可以直接使用Thread类来创建新的线程并运行。

                  import threading
                  import requests
                  
                  def main():
                      urls = ["http://example.com/", 
                              "http://example.com/news", 
                              "http://example.com/about", 
                              "http://example.com/contact",
                              "http://example.com/sitemap",
                              "http://example.com/blog",
                              "http://example.com/jobs",
                              "http://example.com/feedback"]
                  
                      threads = []
                  
                      for url in urls:
                          t = threading.Thread(target=fetch_url, args=(url,))
                          threads.append(t)
                          t.start()
                  
                      for t in threads:
                          t.join()
                  
                  def fetch_url(url):
                      print("Fetching {0}".format(url))
                      try:
                          r = requests.get(url)
                          print("{0}: {1}".format(url, r.status_code))
                      except requests.exceptions.RequestException as e:
                          print("{0}: {1}".format(url, e))
                  

                  使用上述代码,简单来说,我们首先定义了一个列表urls,并在遍历该列表的过程中,创建了多个线程,每个线程都调用了fetch_url函数,并传入了当前的URL。接着,我们在主线程内通过join等待其他线程的结束。

                  代码二

                  另外一种实现方式相对来说更加高级,可以同时限制线程数量来进一步提升效率,我们可以使用Python的线程池来实现。

                  import concurrent.futures
                  import requests
                  
                  def main():
                      urls = ["http://example.com/", 
                              "http://example.com/news", 
                              "http://example.com/about", 
                              "http://example.com/contact",
                              "http://example.com/sitemap",
                              "http://example.com/blog",
                              "http://example.com/jobs",
                              "http://example.com/feedback"]
                  
                      with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
                          future_to_url = {executor.submit(fetch_url, url): url for url in urls}
                          for future in concurrent.futures.as_completed(future_to_url):
                              url = future_to_url[future]
                              try:
                                  data = future.result()
                                  print("{0}: {1}".format(url, data))
                              except Exception as exc:
                                  print("{0}: {1}".format(url, exc))
                  
                  def fetch_url(url):
                      print("Fetching {0}".format(url))
                      try:
                          r = requests.get(url)
                          return r.status_code
                      except requests.exceptions.RequestException as e:
                          return str(e)
                  

                  使用以上代码,我们可以看到,在主函数内,我们首先定义了一个URL列表urls,并使用线程池ThreadPoolExecutor创建了一个最大线程数为5的线程池。随后,我们在使用submit方法向线程池提交任务时,还为每个任务使用了一个dict来存储其对应的URL地址,方便我们后续的输出。最后,我们在对future进行as_completed迭代的过程中获取了每个任务返回的结果。

                  总结

                  以上两种多线程采集Python代码的方式并不是唯一的选择,而是较为常用且简便的方式之一。通过合理使用多线程的方式来提升程序的效率,是Python程序员们需要重点考虑的一项工作。

                  上一篇:python进程和线程用法知识点总结 下一篇:Python的线程之线程同步

                  相关文章

                1. <legend id='42k84'><style id='42k84'><dir id='42k84'><q id='42k84'></q></dir></style></legend>

                      <bdo id='42k84'></bdo><ul id='42k84'></ul>
                    1. <small id='42k84'></small><noframes id='42k84'>

                      <tfoot id='42k84'></tfoot>
                      <i id='42k84'><tr id='42k84'><dt id='42k84'><q id='42k84'><span id='42k84'><b id='42k84'><form id='42k84'><ins id='42k84'></ins><ul id='42k84'></ul><sub id='42k84'></sub></form><legend id='42k84'></legend><bdo id='42k84'><pre id='42k84'><center id='42k84'></center></pre></bdo></b><th id='42k84'></th></span></q></dt></tr></i><div id='42k84'><tfoot id='42k84'></tfoot><dl id='42k84'><fieldset id='42k84'></fieldset></dl></div>