黄逗逗 发表于 2019-7-27 15:36:11

{:9_227:}

Hsfaa 发表于 2019-7-27 16:35:58

下下来看看

fan1993423 发表于 2019-7-30 17:49:03

@Stubborn 楼主,如果这句话for t in crawl_threads: t.join()在parser_threads = [] parser_name = ["parser_1","parser_2","parser_3"]之前,是不是相当于还是单线程运行

Stubborn 发表于 2019-7-30 20:39:52

本帖最后由 Stubborn 于 2019-7-30 20:42 编辑

fan1993423 发表于 2019-7-30 17:49
@Stubborn 楼主,如果这句话for t in crawl_threads: t.join()在parser_threads = [] parser_name = ["pars ...

到这里已经是采集线程结束了,关闭采集线程了
    #等待队列情况
    while not pageQueue.empty(): #判断是否为空 采集队列
      pass
采集线程空了,没有任务,所以结束了采集(或者说生产数据线程)

最好你说下是哪行

fan1993423 发表于 2019-7-31 13:56:14

Stubborn 发表于 2019-7-30 20:39
到这里已经是采集线程结束了,关闭采集线程了

采集线程空了,没有任务,所以结束了采集(或者说生产 ...

while循环的用途我知道,我就是想问你的顺序是初始化采集线程->初始化解析线程->等待采集队列。。。。如果换一下顺序 初始化采集线程->等待采集队列->等待采集主线程结束 然后才去处理解析线程这样和你的结果是一样的吗?或者说有什么不同(其他具体执行程序不变)

Stubborn 发表于 2019-7-31 17:08:17

fan1993423 发表于 2019-7-31 13:56
while循环的用途我知道,我就是想问你的顺序是初始化采集线程->初始化解析线程->等待采集队列。。。。如 ...

虽然不知道你为什么有这个想法,不过看程序走就知道,采集线程的全部数据都是在往data队列里面存的。然后解析线程再从data队列里面取。结果没有测试,从代码上来看,结果会一样,但是速度就没有那么快,既然用了线程,就肯定是要求速度方面的,等待采集结束,再开解析,大致相当于,慢了一半的速度,具体我没有测试过,看代码说的,你有兴趣可以测试下

fan1993423 发表于 2019-7-31 17:15:10

Stubborn 发表于 2019-7-31 17:08
虽然不知道你为什么有这个想法,不过看程序走就知道,采集线程的全部数据都是在往data队列里面存的。然后 ...

我觉得这个可不可以理解采集完成一部分后就交了一部分给解析,从而加快速度

Stubborn 发表于 2019-7-31 21:32:38

fan1993423 发表于 2019-7-31 17:15
我觉得这个可不可以理解采集完成一部分后就交了一部分给解析,从而加快速度

可以的,当采集和解析运行之后,解析线程就会从data队列里面取数据,里面一旦有数据,就进行解析,从而加速的

fan1993423 发表于 2019-8-1 10:04:17

Stubborn 发表于 2019-7-31 21:32
可以的,当采集和解析运行之后,解析线程就会从data队列里面取数据,里面一旦有数据,就进行解析,从而加 ...

嗯,但是有个问题,python有GIL锁,在这里没开多进程的情况下,也就是单进程多线程,那么我有个疑问就是假设总速度不变,你现在将一部分采集给了解析,那么解析那部分会不会占用采集,从而使采集因为线程被占,速度变慢。而且你这个没加锁的话,有没有可能出现线程紊乱的情况?

木木头 发表于 2019-8-1 13:33:15

来了

Stubborn 发表于 2019-8-1 16:26:32

fan1993423 发表于 2019-8-1 10:04
嗯,但是有个问题,python有GIL锁,在这里没开多进程的情况下,也就是单进程多线程,那么我有个疑问就是 ...

解析线程为什么会被占用?看下代码,这个并不要锁,基于生产消费者模型,你看代码可以看到,所有采集线程的采集数据,全部往队列里面存。而所有解析,都是从队列里面取数据,唯一可能产生混乱的地方,就是保存的部分,可以看看开头,和代码贴里面,保存图片有何不同。另外什么地方需要加锁?线程大致的了解下可以参考这个链接点击我前往

jack3223635 发表于 2019-8-1 16:38:58

学习了!!!

phoniex628 发表于 2019-8-7 15:55:19

Mark 一下

庚午 发表于 2019-8-7 21:49:14

谢谢

w454227 发表于 2019-8-11 19:26:01

学习学习

w454227 发表于 2019-8-11 22:35:19

启动了crawl_1线程
当前正在工作的线程是:crawl_1,正在采集第1个页面
启动了crawl_2线程
启动了crwal_3线程
当前正在工作的线程是:crwal_3,正在采集第2个页面
当前正在工作的线程是:crawl_2,正在采集第3个页面
启动了parser_1线程
启动了parser_2线程
启动了parser_3线程
退出了crwal_3线程
退出了crawl_2线程
退出了crawl_1线程
退出了parser_2线程
退出了parser_3线程
退出了parser_1线程
退出主线程
这是什么原因大佬

83519489 发表于 2019-8-12 14:43:41

我直接来看答案了{:10_254:}{:10_277:}

Stubborn 发表于 2019-8-12 21:23:43

w454227 发表于 2019-8-11 22:35
启动了crawl_1线程
当前正在工作的线程是:crawl_1,正在采集第1个页面
启动了crawl_2线程


没有采集到东西,估计改了规则了把

zhixuan9650412 发表于 2019-9-8 10:36:06

0

Rhoda 发表于 2019-9-8 10:54:25

66
页: 1 2 3 4 5 [6] 7 8 9 10
查看完整版本: 我胡汉三又回来了,这次给鱼油带来多线程爬虫案例,以及踩过的深坑