【问题标题】:Multiprocessing with multiprocessing.Pool使用 multiprocessing.Pool 进行多处理
【发布时间】:2021-03-14 18:00:07
【问题描述】:

我对使用 mutiprocessing.Tool 方法的最基本任务也有疑问。 它似乎正在工作,但从未完成最简单的任务。 你能帮我做错什么吗? 我读了一些文章,试图理解它,但可以弄清楚。我添加了一个简短的示例(使用 list(map(squared, range(2_000_000))),它有效,但不是下面的。) 提前致谢,

罗兰

"""
from multiprocessing import Pool
import time
process_pool = Pool(processes = 4)

def squared(n):
    return n ** 2
    
start = time.perf_counter()
process_pool.apply(squared, range(2_000_000))
end = time.perf_counter() - start
print(f"Run time: {end}")
"""

【问题讨论】:

    标签: python-3.x python-multiprocessing


    【解决方案1】:

    这似乎是多线程的情况.....你有没有尝试过类似的东西:

    from concurrent.futures import ThreadPoolExecutor, as_completed
    num_of_threads = 50  # Number of threads executing at the same time
    with ThreadPoolExecutor(max_workers=num_of_threads) as executor:
        tasks = []
        for i in i_list:
            tasks.append(
                executor.submit(
                    <Function_to_execute>, i
                )
            )
    
        for future in as_completed(tasks):
            if future.result():
                yield future.result()  # Here can be just a return, yield you return a generator
    

    【讨论】:

      【解决方案2】:

      我认为你想要imap()(并在定义池之前移动squared()):

      from multiprocessing import Pool
      import time
      
      
      def squared(n):
          return n ** 2
      
      process_pool = Pool(processes = 4)
          
      start = time.perf_counter()
      process_pool.imap(squared, range(2))
      end = time.perf_counter() - start
      print(f"Run time: {end}")
      

      请记住,这不是一个非常具有代表性的示例,因为您不会对结果做任何事情;更好的是

      with Pool(4) as pool:
          results = pool.imap(squared, range(2_000_000))
      
          for result in results:
              pass  # do something here with the result
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-02
        • 2017-04-06
        • 2019-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多