Python中的多线程/多处理

Dan*_*eri 2 python multithreading multiprocessing

我创建了一个简单的子字符串搜索程序,递归查看文件夹并扫描大量文件.该程序使用Boyer-Moore-Horspool算法,在解析大量数据时非常有效.

链接到程序:http://pastebin.com/KqEMMMCT

我现在要做的是让它更有效率.如果查看代码,您会注意到有三个不同的目录被搜索.我希望能够创建一个同时搜索每个目录的进程/线程,这将大大加快我的程序.

实现这个的最佳方法是什么?我做了一些初步的研究,但我的实施都没有成功.它们似乎在处理25分钟后死亡(现在单个流程版本需要大约24小时才能运行;它有很多数据,并且有648个唯一关键字.)

我已经使用多处理API完成了各种实验,并将所有各种文件压缩成3个文件(每个目录一个),然后通过mmap()将文件映射到内存,但是a:我不确定这是否是合适的路径去吧,和b:我的程序在随机点上死了,调试是绝对的噩梦.

是的,我做了大量的谷歌搜索,但我在池/线程/子进程/多线程/多处理之间变得非常困惑.

我不是要求你编写我的程序,只是帮助我理解实现解决方案所需的思考过程.谢谢!

仅供参考:我计划在程序运行后开源代码.我认为这是一个非常有用的脚本,并且在线可用的多处理的现实世界实现的示例有限.

tom*_*m10 5

做什么取决于什么在减慢过程.

如果您正在单个磁盘上读取,并且磁盘I/O正在减慢您的速度,那么多个线程/进程可能会让您慢下来,因为当不同的线程获得控制权时,读取头现在会跳到各处,而您我会花更多的时间去寻求而不是阅读.

如果您正在单个磁盘上读取,并且处理速度正在降低,那么您可能会因使用多处理来分析数据而获得加速,但您仍应从单个线程读取以避免寻道时间延迟(通常非常长,多毫秒).

如果您正在读取多个磁盘,并且磁盘I/O正在减慢您的速度,那么多个线程或进程可能会提高您的速度.线程更容易,并且由于大部分延迟时间都远离处理器,因此GIL不会妨碍您.

如果您正在读取多个磁盘,并且处理速度正在降低,那么您将需要进行多处理.