Python多处理文件读取

Python多处理文件读取,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,我有一个关键字列表,我想验证这些关键字是否在包含100000多个域名的文件中。为了加快处理速度,我想实现多处理,以便可以并行验证每个关键字 我的代码似乎工作得不好,因为单个处理要快得多。怎么了( 想一想为什么这个计划: import multiprocessing as mp def work(keyword): print("working on", repr(keyword)) if __name__ == "__main__":

我有一个关键字列表,我想验证这些关键字是否在包含100000多个域名的文件中。为了加快处理速度,我想实现多处理,以便可以并行验证每个关键字

我的代码似乎工作得不好,因为单个处理要快得多。怎么了(


想一想为什么这个计划:

import multiprocessing as mp

def work(keyword):
    print("working on", repr(keyword))

if __name__ == "__main__":
    with mp.Pool(4) as pool:
        pool.map(work, "google")
印刷品

working on 'g'
working on 'o'
working on 'o'
working on 'g'
working on 'l'
working on 'e'

map()
作用于一个序列,字符串就是一个序列。与其将
map()
调用放在一个循环中,您可能只想用
关键字(整个列表)作为第二个参数调用它一次。

想想为什么这个程序:

import multiprocessing as mp

def work(keyword):
    print("working on", repr(keyword))

if __name__ == "__main__":
    with mp.Pool(4) as pool:
        pool.map(work, "google")
印刷品

working on 'g'
working on 'o'
working on 'o'
working on 'g'
working on 'l'
working on 'e'

map()
作用于一个序列,字符串就是一个序列。与其将
map()
调用放在一个循环中,您可能只想用
关键字(整个列表)作为第二个参数调用它一次。

您应该只执行
pool.map(多处理函数,关键字)
请注意,并行方法的大部分延迟都是由于打印造成的。打印消息是按顺序排列的,这需要花费大量时间。如果我在函数中注释掉print语句,我的机器上的并行任务会得到x60的加速。(但是该时间仍然是单线程解决方案的时间x2。有关该时间,请参阅答案)@MarkTolonen我同意多次读取文件是非常不必要的,但我认为在您建议的set方法中需要解决一些问题:0。这段代码显然是一个多线程练习,而不是一个应用程序,因此目标是使用多处理。1.如何使用set来搜索子字符串你要插入整个域吗?如果是这样的话,集合是无用的,因为它必须被迭代。你会用一些词的概念来分割吗?你会如何定义它们?如果是这样的话,trie数据结构是一个更好的选择。[1/2]…2.在大多数情况下,当我们谈论多处理时,渐进复杂性不是一个相关的度量,因为它忽略了线性时间加速,这在许多非算法应用程序中是至关重要的。[2/2]@kyriakosSt没有注意到代码正在执行“关键字输入”。错误地将其理解为“关键字输入”这可能需要一个集合。您只需执行
pool.map(multiprocessing_func,keywords)
请注意,并行方法的大部分延迟都是由于打印。打印消息是按顺序排列的,这需要大量时间。如果我在函数中注释掉print语句,我的机器上的并行任务会得到x60的加速。(但是该时间仍然是单线程解决方案的时间x2。有关该时间,请参阅答案)@MarkTolonen我同意多次读取文件是非常不必要的,但我认为在您建议的set方法中需要解决一些问题:0。这段代码显然是一个多线程练习,而不是一个应用程序,因此目标是使用多处理。1.如何使用set来搜索子字符串你要插入整个域吗?如果是这样的话,集合是无用的,因为它必须被迭代。你会用一些词的概念来分割吗?你会如何定义它们?如果是这样的话,trie数据结构是一个更好的选择。[1/2]…2.在大多数情况下,当我们谈论多处理时,渐进复杂性不是一个相关的度量,因为它忽略了线性时间加速,这在许多非算法应用程序中是至关重要的。[2/2]@kyriakosSt没有注意到代码正在执行“关键字输入”。错误地将其理解为“关键字输入”这可能需要一套。你好,蒂姆,谢谢你的回复!谢谢你的提示,它现在可以工作了,但是我没有得到我期望的性能改进。仍然需要工作一点。我现在可以看到两个处理器在服务器上工作,但总时间略高于单次处理。原因是什么?没有人告诉她e实际上是心灵感应;-)如果你没有发布任何人都可以运行的实际代码,这样他们就可以复制你实际正在做的事情,那么你所能希望的就是盲目猜测,这种猜测可能会永远持续下去。这不是这个网站的目的。你好,蒂姆,谢谢你的回复!谢谢你的提示,它现在正在运行,但是我没有得到我所期望的性能改进。仍然我现在可以看到两个处理器在服务器上工作,但总时间比单个处理器略高。原因是什么?这里没有人真的有心灵感应;-)如果你不发布任何人都可以运行的实际代码,这样他们就可以重现你的实际操作,那么你所能希望的就是盲目猜测,这种猜测会永远持续下去。这不是本网站的目的。