首页   注册   登录
 qazwsxkevin 最近的时间轴更新

qazwsxkevin

V2EX 第 349448 号会员,加入于 2018-09-14 00:19:53 +08:00
如何多线程(可控数量)历遍完字典?
Python  •  qazwsxkevin  •  20 天前  •  最后回复来自 xfriday
18
qazwsxkevin 最近回复了
粗暴点,爬出去,把相近版本的 chromedriver 都下载下来,逐个替换上去试试
我记得 webdriver 有 option 是可以指定 driver.exe 的路径的。。。
by the way,我没有路由器的管理权
@ClericPy,有不明白的地方,concurrent.futures,比如:

```
eStatusSuit = []
e = futures.ProcessPoolExecutor(max_workers=5)
eStatus = e.submit(ProcessCaseID,someVarA ,someVarB)
eStatusSuit.append(eStatus)
#
eStatus = e.submit(ProcessCaseID,someVarC ,someVarD)
eStatusSuit.append(eStatus)
#
eStatus = e.submit(ProcessCaseID,someVarE ,someVarF)
eStatusSuit.append(eStatus)

#此时是向 e 提交了 3 个任务
#eStatus 对象,我看了一下,似乎是无法查看到 33 个任务具体状态,只能等待 eStatus 全体执行完毕,全部返回 eStatus.result()?
#eStatus.result()是个阻塞式,想不到怎么用。。。

#我是想建立能跑 5 个进程的可控队列,不知道这么干是否合适,还是有更方便的方式?

aExecutor = futures.ProcessPoolExecutor(max_workers=1)
bExecutor = futures.ProcessPoolExecutor(max_workers=1)
cExecutor = futures.ProcessPoolExecutor(max_workers=1)
dExecutor = futures.ProcessPoolExecutor(max_workers=1)
eExecutor = futures.ProcessPoolExecutor(max_workers=1)

然后做个
aExecutorStatus = aExecutor.submit(ProcessCaseID,someVarA ,someVarB)
bExecutorStatus = bExecutor.submit(ProcessCaseID,someVarC ,someVarD)
#省略...

#对各个 ExecutorStatus 的 running(),done()进行循环判断,哪个 False/True 了,就从 queue 里取任务提交过去,哪个失败了,再调度一下优先权
if aExecutorStatus.running():
xxx
#省略...

不知道是不是这样乱来的?
```
@momocraft
@ClericPy
嗯,明白了,感谢,回头我尽量把方式改为 with,有个基础概念不是很清晰的地方,with 包起来的内容,完成后我记得应该是全自动清的,而不用手动去 close,不知道有无理解错(刚起步写 python 没多久,以前基本没用过 with )


另请教 @ClericPy:见过大佬您多次推荐 cdp,其实很早想请教在 github 或者其它地方,有无简单入门的 demo 例子,可以实现 cdp 去 open link,对页面 id/xpath 进行点击,获取页面 html 代码这些简单的起步学习? 官网的每个方法的解释,比较碎...
@Trim21 嗯嗯,是的,是 finnally 里,其实我原本的代码里,finally 是没有的...
20 天前
回复了 qazwsxkevin 创建的主题 Python 如何多线程(可控数量)历遍完字典?
@robinlovemaggie 我这两天自己学习了一下多线程,还不够深入,尽管上面高手们都提到了解决方法,其实一次取 5 个,每次 5 个这样压入函数进行独立线程处理,等 5 个处理完,再下一批,也是可以的,起码比起单线程处理要好多了。。。

细想了一下,保持 5 个,出 1 个进 1 个的 FIFO 队列算法,太难了,我这里的情况可能要连整个处理函数的设计都要改。。。

加上现在的集合来源,是字典,我本来在 for 的历遍里面是有一些 continue 拐弯的,现在也甚是头疼怎么改。。。
20 天前
回复了 qazwsxkevin 创建的主题 Python 如何多线程(可控数量)历遍完字典?
@Vegetable,感谢解答~
@qza1212 ,是的,刚刚琢磨到,字典历遍方式似乎不太适合我这样放到线程队列里,正在琢磨其它办法。。。
@ps1aniuge 学习 ing...
21 天前
回复了 qazwsxkevin 创建的主题 Python 如何多线程(可控数量)历遍完字典?
感谢大伙热心的回复,先挑一些疑问简单回帖了先,手上还有其它事在忙着 ^_^

@Vegetable,是在 Win 的环境下作业的,那么多了线程,历遍的效率总会有提高的吧?

@scukmh,磁盘读写么? 不多,doSomething 就是轮流去生成几个 10 几 kb 的文本,读几个 1MB,2MB 大小的文件,下载几个网页(这个就是要等爬虫的返回时间,不确定时间点就在这里)

doSomething 函数封装得很好,函数完全是独立的,不交叉到局外通信,while 到不完成不返回,超过重试次数就自己结束,有一个地方交叉,可能就是抛出异常的时候,会向"d:\error.log"写点东西,会担心同时多进程同时异常都往 error.log 写内容?
@skt041959 Win7,我做系统的时候特意用回 Administrator
@dantelovepizza 这不就是用了 pyinstaller 来编译的么?
@littlespider89 看来没办法了,有几个用到的库,只能在 3.6 以上使用。。。。
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3996 人在线   最高记录 5043   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 19ms · UTC 03:50 · PVG 11:50 · LAX 19:50 · JFK 22:50
♥ Do have faith in what you're doing.