在 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中文网其他相关文章!