python并行处理任务_Python一行代码完成并行任务

'http://www.reddit.com']

results = map(urllib2.urlopen, urls)

Dummy就是多过程模块的克隆文件。独一不合的是,多过程模块应用的是过程,而dummy则应用线程(当然,它有所有Python常见的限制)。也就是说,数据由一个传递给另一个。这可以或许使得数据轻松的在这两个之间进行进步和回跃,特别是对于摸索性法度榜样来说十分有效,因为你不消肯定框架调用到底是IO 照样CPU模式。

这里调用urlopen办法来把调用结不雅全部按序返回并存储到一个列表里。就像:results = []

forurlinurls:

results.append(urllib2.urlopen(url))

为什么它这么厉害呢?因为只要有了合适的看维map能使并交运行得十分流畅!

b90e0358fb183a91675e5058287e8806.png-wh_651x-s_2882462605.png

有两个可以或许支撑经由过程map函数来完成并行的看魏一个是multiprocessing,另一个是鲜为人知但功能强大年夜的子文件:multiprocessing.dummy。

题外话:这个是什么?你大年夜来没据说过dummy多过程库?我也是比来才知道的。它在多过程的解释文档琅绫擎仅仅只被提到了一句。并且那一句就是大年夜概让你知道有这么个器械的存在。我敢说,如许几近抛售的做法造成的后不雅是不堪假想的!

预备开端

要做到经由过程map函数来完成并行,你应当先导入装有它们的模块:frommultiprocessing import Pool

frommultiprocessing.dummy import PoolasThreadPool

再初始化:pool = ThreadPool()

如不雅我们用处行调用map来代替for轮回的话:

这简单的一句就能代替我们的build_worker_pool 函数在example2.py中的所有工作。换句话说,它创建了很多有效的worker,启动它们来为接下来的工作做预备,以及把它们存储在不合的地位,便利应用。

Pool对象须要一些参数,但最重要的是:过程。它决定pool中的worker数量。如不雅你不填的话,它就会默认为你电脑的内核数值。

如不雅你在CPU模式下应用多过程pool,平日内核数越赶紧度就越快(还有很多其它身分)。然则,当进行线程或者处理收集绑定之类的工作时,情况会比较复杂所以应当应用pool的精确大年夜小。pool = ThreadPool(4) # Sets the poolsizeto4

如不雅你运行过多线程,多线程间的切换将会浪费很多时光,所以你最好耐烦调试出最合适的义务数。

我们如今已经创建了pool对象,立时就能有简单的并行法度榜样了,所以让我们从新写example2.py中的url opener吧!import urllib2

frommultiprocessing.dummy import PoolasThreadPool

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/',

推荐阅读

神经收集是有史以来创造的最优美的编程范式之⼀。在传统的编程⽅法中,我们告诉计算机做什么,把⼤问题分成很多小的、准肯定义的义务,计算机可以很轻易地履行。比拟之>>>详细阅读

地址:http://www.17bianji.com/lsqh/34782.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Numpy和Python的多线程库进行图像处理的并行化。 首先,将图像加载到Numpy数组中: ```python import numpy as np import cv2 img = cv2.imread('image.jpg') img = np.array(img) ``` 接下来,可以使用Numpy的矢量化函数对图像进行处理。例如,下面的代码使用Numpy的multiply函数将图像的每个像素的红色通道值乘以2: ```python def process_image(img): img[:, :, 0] = np.multiply(img[:, :, 0], 2) return img processed_img = process_image(img) ``` 要并行化这个处理过程,可以使用Python的多线程库。下面的代码使用4个线程并行化图像处理: ```python import threading def process_image_thread(img, start_row, end_row): img[start_row:end_row, :, 0] = np.multiply(img[start_row:end_row, :, 0], 2) threads = [] num_threads = 4 rows_per_thread = img.shape[0] // num_threads for i in range(num_threads): start_row = i * rows_per_thread end_row = start_row + rows_per_thread thread = threading.Thread(target=process_image_thread, args=(img, start_row, end_row)) threads.append(thread) thread.start() for thread in threads: thread.join() processed_img = img ``` 在这个例子中,每个线程处理图像的一个垂直切片。每个线程的开始和结束行由图像的总行数和线程数计算得出。每个线程使用process_image_thread函数处理它的切片。最后,所有线程都完成后,将处理后的图像存储在processed_img变量中。 注意,使用多线程并不总是比单线程更快,因为线程切换和同步开销可能会使得并行化变得更慢。因此,需要进行基准测试来确定最佳的线程数和处理方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值