【注:本文作者原创作品,未经允许禁止抄袭。侵权必究!全网追踪】
最近又对这个翻译页面做了一些改动,主要是将后台翻译的过程由单线程改为了多线程,减少了等待时间,以及在翻译页面中添加了几个新的快捷键个别快捷键并没有在页面中给出提示,但是你终究还是会发现他们的,如果你很鸡贼的浏览JS代码的话。
既然改动这么少,又要凑够一篇文章的内容的话,总归还是要写点什么的!
多线程
作为一个一直习惯以C作为主要编程语言的coder,加之对Python3的语言特性不够熟悉就在不久之前,当我第一次看到一段爬虫代码中使用了yield这种语法时,还真是感到啧啧称奇,我自然而然地就给出了如下的多线程方案:
涉及到了多线程共同访问变量的情况。加锁是必然的了。
你可能会问:万一其中的任何一个线程因为什么原因卡住了,怎么办?有时甚至会出现极端的情况,还有一半的任务都还没开始呢,却发现所有线程都还在忙碌着。
我的解决方案是:向上天祈祷,不要卡住,不要卡住,不要卡住。
线程池与as_completed
为了让代码流程看起来更加清爽,可以使用Python中的ThreadPoolExecutor线程池,于是,代码流程可以变成这样:
不过,问题来了,尽管线程的管理自动化了,还是没有解决万一某个线程卡住了的问题?
虽然concurrent.futures.as_completedfs, timeout=None函数可以指定一个超时时间,一旦超时,则可以选择一了百了,集体罢工---反正是得不到好的结果了,不如,让程序就此停摆。
【注:本文作者原创作品,未经允许禁止抄袭。侵权必究!全网追踪】
领取专属 10元无门槛券
私享最新 技术干货