首页 >后端开发 >Python教程 >Python的多线程如何使用'map”和'pool”提高代码效率?

Python的多线程如何使用'map”和'pool”提高代码效率?

Linda Hamilton
Linda Hamilton原创
2024-12-21 07:44:14386浏览

How Can Python's Multithreading Enhance Code Efficiency Using `map` and `pool`?

在 Python 中使用线程

在不断发展的编程世界中,多线程的利用对于提高代码效率变得越来越有价值。本文旨在提供一个全面的示例,展示如何在 Python 中跨多个线程有效分配任务。

使用映射和池的多线程

现代 Python 在以下情况下提供了显着的简单性:随着map和pool的引入,进入了多线程。下面的代码片段源自一篇关于“一行并行”的著名文章,优雅地展示了这种方法的强大功能:

from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(4)
results = pool.map(my_function, my_array)

此多线程代码相当于以下单线程版本:

results = []
for item in my_array:
    results.append(my_function(item))

认识地图

地图,万能的功能在 Python 中,通过将指定的函数应用于序列中的每个元素来简化并行性。它有效地迭代序列,执行函数,并将结果聚合到一个列表中。

多重处理和虚拟多重处理

多重处理及其鲜为人知的同级多重处理.dummy,提供地图功能的并行版本。虽然多处理利用多个进程,但虚拟变体使用线程,使其成为输入/输出密集型任务的理想选择。

使用 multiprocessing.dummy 实现

考虑以下代码代码片段,利用 multiprocessing.dummy 打开多个 URL同时:

import urllib2
from multiprocessing.dummy import Pool as ThreadPool

urls = [
  'http://www.python.org',
  'http://www.python.org/about/',
  'http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html',
  'http://www.python.org/doc/',
  'http://www.python.org/download/',
  'http://www.python.org/getit/',
  'http://www.python.org/community/',
  'https://wiki.python.org/moin/',
]

pool = ThreadPool(4)
results = pool.map(urllib2.urlopen, urls)
pool.close()
pool.join()

计时结果说明使用多个线程可以显着提高性能:

Single thread:   14.4 seconds
       4 Pool:   3.1 seconds
       8 Pool:   1.4 seconds
      13 Pool:   1.3 seconds

传递多个参数

在 Python 3.3 和之后,可以使用以下命令将多个参数传递给池中的函数技巧:

  • 传递多个数组:
results = pool.starmap(function, zip(list_a, list_b))
  • 传递一个常量和一个数组:
results = pool.starmap(function, zip(itertools.repeat(constant), list_a))

以上是Python的多线程如何使用'map”和'pool”提高代码效率?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn