蟒蛇 多处理中的共享变量以预映射/减少

I’我最近在Python中使用了多处理库,并开始使用共享变量功能。它可以改变我这样的事情 以前的帖子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
多处理 进口 池子
pymongo 进口 连接
 
定义 多少(server_number):
    “返回集合中有多少个文档”
    c = 连接(“ 192.168.0。” + server_number) #连接到远程数据库
     返回 c. 我的数据库 .我的收藏. 计数 ()
 
池子 = 泳池 (流程=4)
伺服器 = [1,2,3,4]
结果 = 池子 . 地图 (多少, 伺服器 ) #map阶段
池子 .()
 
#减少阶段
结果 = ( 结果 )
 
打印 “您在所有MongoDB服务器上都有{0}个文档!”. 格式 ( 结果 )

变得更好:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
多处理 进口 , 池子
pymongo 进口 连接
 
定义 多少(server_number):
    “返回集合中有多少个文档”
    c = 连接(“ 192.168.0。” + server_number) #连接到远程数据库
    shared_count. + = c. 我的数据库 .我的收藏. 计数 ()
 
#设定
池子 = 泳池 (流程=4)
伺服器 = [1,2,3,4]
shared_count = ( “一世” , 0)
 
结果 = 池子 . 地图 (多少, 伺服器 ) #map阶段
池子 .()
 
打印 “您在所有MongoDB服务器上都有{0}个文档!”. 格式 (shared_count)

从而省去了还原阶段。如果您有一个共享字典,这特别有用。’从多个服务器重新更新。那里’是另一个可能的共享数据类型,称为Array,正如建议的那样,它是共享数组。 注意: 一个陷阱(我爱上了)认为 “一世”   in ( “一世” , 0)  是变量的名称。其实,它的 类型码 代表“integer”.

但是,还有其他方法可以做到这一点,每种方法都有其自身的取舍:

# 优点 缺点
1 共享文件 易于实施和访问后 非常慢
2 共享的mongoDB文档 易于实施 缓慢不断查询
3 多处理值/数组(此示例) 非常快,易于实施 仅在一台PC上,可以’进程被杀死后无法访问
4 Memcached共享价值 网络方面对于大型分布式数据库很有用,shared.set()函数已经可用 TCP可能会使您慢一点

发表评论