在Python中进行多线程 /多处理时,如何避免重复的结果



我几周前就开始在Python进行编程。我对Java有一些经验,所以我很难设置。

现在,我有一个程序,该程序使用Urllib刮擦网站列表的源代码。

我有成千上万的网站需要刮擦,所以我显然希望使其进行多线程或多处理(我真的不知道区别(。

好处是我的多线程起作用!但这对我来说基本毫无意义,因为我所有的线程都在刮擦完全相同的站点,但除了重复外,什么都没有。

如何避免这个问题?感谢您提前的帮助:(

多线程和多处理之间的差异在Python中很重要,因为全局解释器锁定会阻止线程在解释器中同时执行代码。为了进行Web刮擦目的,只要线程仅执行Web请求,就可以使用线程(因此,在等待时只有线程块(。如果您还想并行处理响应,最好使用multiprocessing,以便每个子过程都有自己的解释器,并且可以利用CPU内核。

关于重复项的问题,您可能会有一个错误将站点列表分配到线程或子过程的方式。在multiprocessing中,您有一个Queue,该CC_3是过程安全的(也是线程安全(。这意味着,如果两个子过程尝试同时从队列中 get,则将从队列中获得顺序项目,而不是同一项目。

总而言之,您应该从主线程中的Queue中的每个站点,然后从每个工作人员或子过程中进行get

最新更新