如何解决Python中的简单并行处理
我有一个(非常)简单的过程可以执行多次,具体过程如下:
import time
class Shop:
def __init__(self):
time.sleep(1.)
self.sale_price = 0
def update(self,weight,price):
self.sale_price = weight * price
my_list = [Shop() for _ in range(20)] #20 shops
weight,price = 2,3
for o in my_list:
o.update(weight,price)
(函数update
更改o
的内部状态,没有任何返回值)
我的问题:使此循环/进程并行运行的简单方法是什么?
我在这里看到了许多关于并行数学运算(例如矩阵运算)的示例,但是我无法让它们作为我的简单示例工作。我正在使用Python 3.6.5
解决方法
找到一个简单的解决方案:
import time
from joblib import Parallel,delayed
import multiprocessing
class Shop:
def __init__(self):
time.sleep(1.)
self.sale_price = 0
def update(self,weight,price):
self.sale_price = weight * price
my_list = [Shop() for _ in range(20)] #20 shops
weight,price = 2,3
### Non-parallel
for o in my_list:
o.update(weight,price)
### Parallel
#Helper function (doesn't take weight/price parameters - assumes these are already defined)
def update2(o):
o.update(weight,price)
return o
num_cores = multiprocessing.cpu_count()
my_list = Parallel(n_jobs=num_cores)(delayed(update2)(o) for o in my_list)
我意识到这最终会重新分配my_list
,但这对我来说很好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。