0

我创建了一些使用 python 多处理库并行运行的代码。Schema 非常简单:多个工人生产字符串,一个工人消费和分析字符串。

目前我正在使用多处理队列,它存储字符串,创建如下:

manager = multi.Manager() 
queue = manager.Queue(20)

并以这种方式放入/取出数据:

queue.put(string)
queue.get(timeout = 5)

在 htop 中的一些分析和观察使我得出结论,这些操作对 CPU 的要求很高。

我的问题是,有没有更好(更快)的方式如何在所描述的方案中共享一些字符串存储?

请注意,我并不关心存储类型是否是 FIFO .. 但这对我来说会更好。

4

1 回答 1

1

这些操作要求很高,因为它们必须在进程之间进行大量锁定和通信(请记住,这会Manager产生一个用于保留共享对象的新进程)。

为了避免这种开销,您应该将通信量减少到最低限度。例如,不是一次发送一个字符串,而是发送一个字符串序列N(每个有效负载的字符串数量取决于应用程序,您必须测试一下哪个最有效)。工作线程可以获取这些序列,处理所有字符串并将所有结果放在输出队列中。

put()从一个简单的微基准测试来看,一个对象所花费的时间似乎至少 0.1是几毫秒。如果对象很复杂,则时间可能会达到几毫秒。如果您要发送非常小的字符串,那么处理它们所花费的时间可能在几微秒左右,或者几十微秒左右。

于 2013-08-20T17:21:37.037 回答