分类档案: 多处理

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

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可能会使您慢一点

蟒蛇中真正简单的多处理–然后链接到MongoDB

蟒蛇中的多处理非常简单!您可以使用 泳池()  class.

1
2
3
4
5
6
7
8
9
10
11
多处理 进口 泳池
 
定义 add_one(to_what):
    “增加整数的琐碎函数”
    返回 to_what + 1
 
池子 = 泳池(流程=4) #spawn 4个进程
数字 = [1,2,3,4] #这是我们的测试曾夫人论坛
结果 = 池子.地图(add_one,数字) #发送函数和每个数字1
池子.() #杀死过程
打印 结果 #将返回[2,3,4,5]

在这里,我们生成了4个进程,并使用map()函数向每个进程发送一个数字。

这是一个简单的示例,但是当每个进程执行诸如建立远程连接之类的操作时,它会变得更加强大:

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