定义适当数量的流程



我有一个python代码处理很多apache日志(解压,解析,处理数字,regexping等)。一个父进程接受文件列表(最多几百万),并使用多进程池将文件列表发送给工作进程进行解析。

我想知道,是否有任何指南/基准/建议可以帮助我估计子进程的理想数量?每个核心一个进程比启动几百个进程更好吗?

目前脚本执行的3/4时间是读取文件并解压缩它们,在资源方面,它的CPU是100%加载,内存和I/O是ok的。所以我认为有很多事情可以通过适当的多处理设置来完成。脚本将在不同的机器/操作系统上运行,因此也欢迎特定于操作系统的提示。

另外,使用线程而不是多进程有什么好处吗?

我想知道,如果有任何指南/基准/建议,可以帮助我估计子进程的理想数量?

每个核心一个进程比启动几百个进程更好吗?

你不可能事先知道

自由度太多了。

你只能通过实验来发现它,直到你得到你想要的性能水平。

另外,使用线程而不是多进程有什么好处吗?

很少。

线程没有多大帮助。当进程(作为一个整体)等待O/S完成I/O请求时,执行I/O的多个线程将被锁定等待。

您的操作系统在调度进程方面做得非常非常好。当你有I/O密集型操作时,你真的需要多个进程。

如果程序受I/O限制,多核不会提供更好的性能。如果磁盘服务两个或更多主服务器,性能甚至可能变得更差。

我不确定当前的操作系统是否这样做,但过去I/O缓冲区是按进程分配的,因此将一个进程的缓冲区分配给多个线程会导致缓冲区抖动。您最好使用多个进程来处理I/o繁重的任务。

我先回答最后一个问题。在CPython中,通过跨线程分配cpu负载来获得相当大的性能提升几乎是不可能的。这是由于全局解释器锁。在这方面,multiprocessing是更好的选择。

至于估计理想的工作人员数量,我的建议是:用你的代码、数据、硬件和不同数量的工作人员进行一些实验,看看你能从加速、瓶颈等方面收集到什么。

相关内容

  • 没有找到相关文章

最新更新