用于python多处理的包含字符串的快速共享对象

2024-05-19 03:03:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一些使用python多处理库并行运行的代码。 模式非常简单:多个工人生成字符串,一个工人使用并分析字符串。在

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

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

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

^{pr2}$

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

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

请注意,我并不在乎存储类型是否为FIFO。。但这对我更好。在


Tags: 数据字符串代码队列queue方式模式manager
1条回答
网友
1楼 · 发布于 2024-05-19 03:03:06

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

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

从一个简单的微基准测试来看,一个对象花费在put()的时间至少是毫秒。如果对象很复杂,那么时间可能会增加到几毫秒。如果您发送的是非常小的字符串,则处理这些字符串所需的时间可能是几秒或几十微秒。在

相关问题 更多 >

    热门问题