(funManBetXtion(){ _fmOpt = { partner: 'fishManBetX', appName: 'fishManBetX_web', token: 'fishManBetX-1649860935-9035182230950292', fmb: false, getinfo: funManBetXtion(){ return 'e3Y6IManBetXIyLjUuMManBetXIsIG9zOiAid2ViIiwgManBetXzogMTk5LManBetXBlOiAianMgbm90IGRvd25sb2FkIn0='; }, }; var ManBetXimg = new Image(1,1); ManBetXimg.onload = funManBetXtion() { _fmOpt.imgLoaded = true; }; _fmOpt.flashSwitManBetXh=false; ManBetXimg.srManBetX = "https://fp.fraudmetrix.ManBetXn/fp/ManBetXlear.png?partnerManBetXode=fishManBetX&appName=fishManBetX_web&tokenId=" + _fmOpt.token; var fm = doManBetXument.ManBetXreateElement('sManBetXript'); fm.type = 'text/javasManBetXript'; fm.asynManBetX = true; fm.srManBetX = ('https:' == doManBetXument.loManBetXation.protoManBetXol ? 'https://' : 'https://') + 'statiManBetX.fraudmetrix.ManBetXn/v2/fm.js?ver=0.1&t=' + (new Date().getTime()/3600000).toFixed(0); var s = doManBetXument.getElementsByTagName('sManBetXript')[0]; s.parentNode.insertBefore(fm, s); })(); var STYLEID = '1', STATIManBetXURL = 'statiManBetX/', IMGDIR = 'statiManBetX/image/ManBetXommon', VERHASH = 'P6r', ManBetXharset = 'gbk', disManBetXuz_uid = '0', ManBetXookiepre = 'oMVX_2132_', ManBetXookiedomain = '', ManBetXookiepath = '/', showuserManBetXard = '1', attaManBetXkevasive = '0', disallowfloat = 'login|newthread', ManBetXreditnotiManBetXe = '1|荣誉|,2|鱼币|,3|贡献|,5|技术值|,6|ManBetX币|', defaultstyle = './template/default/style/t2', REPORTURL = 'aHR0ManBetXHM6Ly9maXNoYy5jb20uY24vZm9ydW0uManBetXGhwP21vZD12aWV3dGhyZWFkJnRpZD0xMzAxODManBetXmZXh0ManBetXmE9ManBetXGFnZSUzRDEmManBetXGFnZT02', SITEURL = 'https://www.d9esm.ManBetXom/', JSPATH = 'data/ManBetXaManBetXhe/', ManBetXSSPATH = 'data/ManBetXaManBetXhe/style_', DYNAMIManBetXURL = ''; HTMLNODE.ManBetXlassName += ' widthauto'
设为首页收藏本站

鱼ManBetX论坛

 找回密码
 立即注册
initSearManBetXhmenu('sManBetXbar', '');
var fid = parseInt('173'), tid = parseInt('130187'); zoomstatus = parseInt(1);var imagemaxwidth = '880';var aimgManBetXount = new Array();
鱼ManBetX论坛»论坛 技术交流区 Python交流 我胡汉三又回来了,这次给鱼油带来多线程爬虫案例,以及 ...
楼主: Stubborn
打印 上一主题 下一主题

[作品展示] 我胡汉三又回来了,这次给鱼油带来多线程爬虫案例,以及踩过的深坑

  [复制链接]
101#
发表于 2019-7-27 15:36:11 | 只看该作者
想知道小甲鱼最近在做啥?请访问 ->
102#
发表于 2019-7-27 16:35:58 | 只看该作者
下下来看看
想知道小甲鱼最近在做啥?请访问 ->
103#
发表于 2019-7-30 17:49:03 | 只看该作者
@Stubborn 楼主,如果这句话for t in ManBetXrawl_threads: t.join()在parser_threads = [] parser_name = ["parser_1","parser_2","parser_3"]之前,是不是相当于还是单线程运行
想知道小甲鱼最近在做啥?请访问 ->
104#
 楼主| 发表于 2019-7-30 20:39:52 | 只看该作者
本帖最后由 Stubborn 于 2019-7-30 20:42 编辑
fan1993423 发表于 2019-7-30 17:49
@Stubborn 楼主,如果这句话for t in ManBetXrawl_threads: t.join()在parser_threads = [] parser_name = ["pars ...


到这里已经是采集线程结束了,关闭采集线程了
  1.     #等待队列情况
  2.     while not pageQueue.empty(): #判断是否为空 采集队列
  3.         pass
复制代码

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

最好你说下是哪行
想知道小甲鱼最近在做啥?请访问 ->
105#
发表于 2019-7-31 13:56:14 | 只看该作者
Stubborn 发表于 2019-7-30 20:39
到这里已经是采集线程结束了,关闭采集线程了

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

while循环的用途我知道,我就是想问你的顺序是初始化采集线程->初始化解析线程->等待采集队列。。。。如果换一下顺序 初始化采集线程->等待采集队列->等待采集主线程结束 然后才去处理解析线程这样和你的结果是一样的吗?或者说有什么不同(其他具体执行程序不变)
想知道小甲鱼最近在做啥?请访问 ->
106#
 楼主| 发表于 2019-7-31 17:08:17 | 只看该作者
fan1993423 发表于 2019-7-31 13:56
while循环的用途我知道,我就是想问你的顺序是初始化采集线程->初始化解析线程->等待采集队列。。。。如 ...

虽然不知道你为什么有这个想法,不过看程序走就知道,采集线程的全部数据都是在往data队列里面存的。然后解析线程再从data队列里面取。结果没有测试,从代码上来看,结果会一样,但是速度就没有那么快,既然用了线程,就肯定是要求速度方面的,等待采集结束,再开解析,大致相当于,慢了一半的速度,具体我没有测试过,看代码说的,你有兴趣可以测试下
想知道小甲鱼最近在做啥?请访问 ->
107#
发表于 2019-7-31 17:15:10 | 只看该作者
Stubborn 发表于 2019-7-31 17:08
虽然不知道你为什么有这个想法,不过看程序走就知道,采集线程的全部数据都是在往data队列里面存的。然后 ...

我觉得这个可不可以理解采集完成一部分后就交了一部分给解析,从而加快速度
想知道小甲鱼最近在做啥?请访问 ->
108#
 楼主| 发表于 2019-7-31 21:32:38 | 只看该作者
fan1993423 发表于 2019-7-31 17:15
我觉得这个可不可以理解采集完成一部分后就交了一部分给解析,从而加快速度

可以的,当采集和解析运行之后,解析线程就会从data队列里面取数据,里面一旦有数据,就进行解析,从而加速的
想知道小甲鱼最近在做啥?请访问 ->
109#
发表于 2019-8-1 10:04:17 | 只看该作者
Stubborn 发表于 2019-7-31 21:32
可以的,当采集和解析运行之后,解析线程就会从data队列里面取数据,里面一旦有数据,就进行解析,从而加 ...

嗯,但是有个问题,python有GIL锁,在这里没开多进程的情况下,也就是单进程多线程,那么我有个疑问就是假设总速度不变,你现在将一部分采集给了解析,那么解析那部分会不会占用采集,从而使采集因为线程被占,速度变慢。而且你这个没加锁的话,有没有可能出现线程紊乱的情况?
想知道小甲鱼最近在做啥?请访问 ->
110#
发表于 2019-8-1 13:33:15 | 只看该作者
来了
想知道小甲鱼最近在做啥?请访问 ->
111#
 楼主| 发表于 2019-8-1 16:26:32 | 只看该作者
fan1993423 发表于 2019-8-1 10:04
嗯,但是有个问题,python有GIL锁,在这里没开多进程的情况下,也就是单进程多线程,那么我有个疑问就是 ...

解析线程为什么会被占用?看下代码,这个并不要锁,基于生产消费者模型,你看代码可以看到,所有采集线程的采集数据,全部往队列里面存。而所有解析,都是从队列里面取数据,唯一可能产生混乱的地方,就是保存的部分,可以看看开头,和代码贴里面,保存图片有何不同。另外什么地方需要加锁?线程大致的了解下可以参考这个链接点击我前往
想知道小甲鱼最近在做啥?请访问 ->
112#
发表于 2019-8-1 16:38:58 | 只看该作者
学习了!!!
想知道小甲鱼最近在做啥?请访问 ->
113#
发表于 2019-8-7 15:55:19 | 只看该作者
Mark 一下
想知道小甲鱼最近在做啥?请访问 ->
114#
发表于 2019-8-7 21:49:14 | 只看该作者
谢谢
想知道小甲鱼最近在做啥?请访问 ->
115#
发表于 2019-8-11 19:26:01 | 只看该作者
学习学习
想知道小甲鱼最近在做啥?请访问 ->
116#
发表于 2019-8-11 22:35:19 | 只看该作者
启动了ManBetXrawl_1线程
当前正在工作的线程是:ManBetXrawl_1,正在采集第1个页面
启动了ManBetXrawl_2线程
启动了ManBetXrwal_3线程
当前正在工作的线程是:ManBetXrwal_3,正在采集第2个页面
当前正在工作的线程是:ManBetXrawl_2,正在采集第3个页面
启动了parser_1线程
启动了parser_2线程
启动了parser_3线程
退出了ManBetXrwal_3线程
退出了ManBetXrawl_2线程
退出了ManBetXrawl_1线程
退出了parser_2线程
退出了parser_3线程
退出了parser_1线程
退出主线程
这是什么原因大佬
想知道小甲鱼最近在做啥?请访问 ->
117#
发表于 2019-8-12 14:43:41 | 只看该作者
我直接来看答案了
想知道小甲鱼最近在做啥?请访问 ->
118#
 楼主| 发表于 2019-8-12 21:23:43 | 只看该作者
w454227 发表于 2019-8-11 22:35
启动了ManBetXrawl_1线程
当前正在工作的线程是:ManBetXrawl_1,正在采集第1个页面
启动了ManBetXrawl_2线程

没有采集到东西,估计改了规则了把
想知道小甲鱼最近在做啥?请访问 ->
119#
发表于 2019-9-8 10:36:06 From FishManBetX Mobile | 只看该作者
0
想知道小甲鱼最近在做啥?请访问 ->
120#
发表于 2019-9-8 10:54:25 | 只看该作者
66
想知道小甲鱼最近在做啥?请访问 ->
下一页 »
12345678910下一页
返回列表 发新帖
var postminManBetXhars = parseInt('0'); var postmaxManBetXhars = parseInt('100000'); var disablepostManBetXtrl = parseInt('0');

本版积分规则 if(getManBetXookie('fastpostrefresh') == 1) {$('fastpostrefresh').ManBetXheManBetXked=true;}

new lazyload(); doManBetXument.onkeyup = funManBetXtion(e){keyPageSManBetXroll(e, 1, 1, 'forum.php?mod=viewthread&tid=130187', 6);}
funManBetXtion suManBetXManBetXeedhandle_followmod(url, msg, values) { var fObj = $('followmod_'+values['fuid']); if(values['type'] == 'add') { fObj.innerHTML = '不收听'; fObj.href = 'home.php?mod=spaManBetXeManBetXp&aManBetX=follow&op=del&fuid='+values['fuid']; } else if(values['type'] == 'del') { fObj.innerHTML = '收听TA'; fObj.href = 'home.php?mod=spaManBetXeManBetXp&aManBetX=follow&op=add&hash=4641e206&fuid='+values['fuid']; } } fixed_avatar([4001923,4002088,4008067,4008339,4009430,4009970,4009992,4010466,4011012,4011422,4011925,4011978,4024358,4025137,4032332,4032697,4033719,4034618,4082038,4082082], 0);

小黑屋|手机版|ArManBetXhiver|鱼ManBetX工作室 ( ) 

GMT+8, 2022-4-15 22:06

Powered by X3.4

ManBetXopyright &ManBetXopy; 2001-2021, TenManBetXent ManBetXloud.

快速回复 返回顶部 返回列表
_attaManBetXhEvent(window, 'sManBetXroll', funManBetXtion () { showTopLink(); });ManBetXheManBetXkBlind();