I was thinking to leave the parent process parsing the file containing directories and use child processes to fetch the other files.
目录就是一个名称。父级解析一个列表,并将目录名称提供给每个子级。正确的?然后孩子读取目录中的文件。在Since the parent would need to obtain the data before to create childs it would be a blocking architecture (the parent has to read all the file before to call childs),
嗯。孩子不读目录里的文件?上面写着孩子读文件。家长阅读大量数据并将其推给孩子是愚蠢的。在while I'd like to send to one of the childs the list containing directories each 100 results.
嗯。这是不同的。现在您需要让父对象读取一个目录名,读取一批100个文件名,然后将这些文件名发送给子对象。可以。这比阅读所有的数据还没那么傻。现在只有100个名字。在So, the parent continues parsing the file while childs work at the same time to find the keyword.
好吧。但是你完全错过了并行处理的机会。在
仔细阅读multprocessing模块。在
你想要的是两个队列和两种工人。在
您的应用程序将构建这两个队列。它将构建一个源进程、“获取批处理”工作进程池和一个“获取文件”工作进程池。在来源。这个过程(基本上)是一个读取原始“包含目录的文件”的函数。并将每个目录名放入“获取批处理”队列中。
获取批处理。这是一个进程池。每个进程都是一个函数,它从“获取批处理”队列中获取一个条目。这是一个目录名。然后它读取目录并将一个由100个文件名组成的元组放入“getfiles”队列中。
获取文件。这是一个进程池。每个进程都是一个函数,它从“获取文件”队列中获取一个条目。这是一个由100个文件组成的元组。然后它打开并读取这100个文件,用它们来做上帝知道的事情。
另一个想法是将他们的任务放入队列中,并将结果放入他们的队列中。这些工人全部同时运行。在