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

      <small id='9u82b'></small><noframes id='9u82b'>

        <bdo id='9u82b'></bdo><ul id='9u82b'></ul>

        浅谈python多线程和队列管理shell程序

        时间:2023-12-17

            <legend id='Zv5dk'><style id='Zv5dk'><dir id='Zv5dk'><q id='Zv5dk'></q></dir></style></legend>

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

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

                  <tbody id='Zv5dk'></tbody>
              2. <small id='Zv5dk'></small><noframes id='Zv5dk'>

                <tfoot id='Zv5dk'></tfoot>

                  这里是关于“浅谈python多线程和队列管理shell程序”的完整攻略。

                  1. 什么是Python多线程和队列管理

                  Python是一种高级编程语言,具有易学易用、灵活性高等特点。多线程和队列管理则是Python中的两个非常重要的概念。

                  1.1 多线程

                  多线程指的是在一个程序中同时运行多个线程,实现多个任务同时进行,提高程序的运行效率。Python提供了threading库,可以用来实现多线程的功能。

                  1.2 队列管理

                  队列管理指的是通过Python中的queue库,对程序中的数据进行管理和分发。通常情况下,队列管理被用来实现多线程之间的通信和数据共享。

                  2. Python多线程和队列管理的应用

                  Python多线程和队列管理可以用来编写各种各样的程序,例如网络爬虫、图像处理、数据分析等。下面,我们通过两个简单的示例来说明多线程和队列管理的应用。

                  2.1 示例1:使用多线程和队列管理下载网络图片

                  本示例通过多线程和队列管理,实现从指定的网址下载图片,并将下载成功的图片保存到本地磁盘。

                  import urllib.request
                  import threading
                  import queue
                  
                  # 定义图片下载函数
                  def download_pic(url, folder):
                      try:
                          # 从网络获取图片数据
                          data = urllib.request.urlopen(url).read()
                          # 构造本地文件名
                          filename = url.split("/")[-1]
                          filepath = folder + "/" + filename
                          # 写入本地文件
                          with open(filepath, "wb") as file:
                              file.write(data)
                              print("saved: ", filepath)
                      except:
                          print("fail: ", url)
                  
                  # 定义多线程函数
                  def multi_thread(folder, urls, max_workers=10):
                      # 创建一个队列,用来存放需要下载的图片url
                      url_queue = queue.Queue()
                      for url in urls:
                          url_queue.put(url)
                  
                      # 创建多个线程,每个线程从队列中取出一个url进行下载
                      for i in range(max_workers):
                          t = threading.Thread(target=worker, args=(url_queue,folder))
                          t.daemon = True
                          t.start()
                  
                      # 等待队列中的url全部下载完成
                      url_queue.join()
                  
                  # 定义工作线程函数
                  def worker(url_queue, folder):
                      while True:
                          try:
                              url = url_queue.get()
                              download_pic(url, folder)
                              url_queue.task_done()
                          except queue.Empty:
                              break
                  
                  # 主函数
                  if __name__ == '__main__':
                      # 测试数据,这里使用百度图片搜索“cute kitten”
                      url_base = "https://image.baidu.com/search/down"
                      url_params = "?tn=download&word=cute kitten&ie=utf-8&fr=detail&url=http%3A%2F%2Fphotocdn.sohu.com%2F20120112%2FImg331819276.jpg&thumburl=http%3A%2F%2Fimg1.imgtn.bdimg.com%2Fit%2Fu%3D3320514253%2C868799158%26fm%3D26%26gp%3D0.jpg"
                      urls = [url_base+url_params]*3
                  
                      # 运行多线程程序
                      folder = "./kitten"
                      multi_thread(folder, urls, max_workers=3)
                  

                  2.2 示例2:通过队列管理并行运行shell命令

                  本示例通过队列管理,实现对多个shell命令进行并行运行,并将运行结果写入文件。

                  import subprocess
                  import threading
                  import queue
                  
                  # 定义shell命令运行函数
                  def run_cmd(cmd, output):
                      try:
                          # 运行shell命令并将结果写入文件
                          with open(output, "wb") as file:
                              subprocess.run(cmd, shell=True, check=True, stdout=file)
                              print("finished: ", cmd)
                      except:
                          print("fail: ", cmd)
                  
                  # 定义多线程函数
                  def multi_thread(cmds, outputs, max_workers=10):
                      # 创建一个队列,用来存放需要运行的shell命令
                      cmd_queue = queue.Queue()
                      for cmd in cmds:
                          cmd_queue.put(cmd)
                  
                      # 创建多个线程,每个线程从队列中取出一个shell命令进行运行
                      for i in range(max_workers):
                          t = threading.Thread(target=worker, args=(cmd_queue, outputs))
                          t.daemon = True
                          t.start()
                  
                      # 等待队列中的shell命令全部运行完成
                      cmd_queue.join()
                  
                  # 定义工作线程函数
                  def worker(cmd_queue, outputs):
                      while True:
                          try:
                              cmd = cmd_queue.get()
                              output = outputs[cmds.index(cmd)]
                              run_cmd(cmd, output)
                              cmd_queue.task_done()
                          except queue.Empty:
                              break
                  
                  # 主函数
                  if __name__ == '__main__':
                      # 测试数据,同时运行三个shell命令
                      cmds = ["ls -la", "pwd", "whoami"]
                      outputs = ["ls.txt", "pwd.txt", "whoami.txt"]
                  
                      # 运行多线程程序
                      multi_thread(cmds, outputs, max_workers=3)
                  
                  上一篇:Python3中多线程编程的队列运作示例 下一篇:如何用Python从桌面读取二维码信息详解

                  相关文章

                1. <small id='irOoH'></small><noframes id='irOoH'>

                2. <tfoot id='irOoH'></tfoot>
                3. <legend id='irOoH'><style id='irOoH'><dir id='irOoH'><q id='irOoH'></q></dir></style></legend>

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

                  • <bdo id='irOoH'></bdo><ul id='irOoH'></ul>