最近,根据学弟的一个小提议,写了一个基于 404 模版的 网站敏感信息扫描的程序。
项目在这里: https://github.com/RickGray/simplescan
但是,直接用 multiprocessing 中的多线程来进行处理,好怎想效率并不么高。
想问问大家遇到这种网络请求密集型任务时都是怎么处理的。
|  |      1est      2015-10-27 11:12:13 +08:00 multiprocessing 貌似是多进程,不是多线程 | 
|  |      2felixzhu      2015-10-27 11:14:49 +08:00 协程吧, gevent 之类的 | 
|  |      3shadowmydx      2015-10-27 11:26:13 +08:00 Python 之所以引入 multiprocessing ,是因为 Python 有全局解释器锁,不能很好的发挥多 CPU 的计算能力。所以如果有 CPU 密集型的计算任务时,为了发挥多 CPU 的计算能力,就会把计算任务分发到不同的进程中完成。 问题在于,网络请求密集型的任务不属于 CPU 密集型而属于 I/O 阻塞型,这个时候,多 CPU 对于任务完成的加力并不明显,而进程的开销反而会拖累程序的效率。所以此时可以选用多线程的方案,来减少新建进程的开销和进程间通信的开销。 题外话,在没看到效率显著提升时,不妨线程开多点。 我 15 个线程跑一个任务,感觉龟速。开到 30 后就刷屏了。 | 
|  |      4junnplus      2015-10-27 11:32:28 +08:00 除了网络延迟之外,多线程就取决于 cpu 核数了 | 
|  |      5RickGray OP | 
|  |      6leavic      2015-10-27 12:14:39 +08:00 网络的异步 io 才是瓶颈, cpu 不是,请考虑 gevent | 
|  |      7Hipponensis      2015-10-27 12:46:54 +08:00 asyncio 、 aiohttp | 
|  |      8wencan      2015-10-27 16:02:10 +08:00 node 欢迎你 | 
|  |      9alexapollo      2015-10-27 16:09:15 +08:00 asyncio, gevent | 
|      10chenwen      2015-10-27 16:10:59 +08:00 协程才是王道 | 
|  |      11ericls      2015-10-28 03:57:03 +08:00 如果是 python 3 就用 aiohttp 如果是 python2 就用 gevent  顺便提一下, requests 有个 版本叫 grequests 同一个作者 用起来不错 现在 gevent 也只是 python3 了 | 
|  |      12ryd994      2015-10-28 04:09:10 +08:00 上 gevent ,新手用 monkeypatch 也能有不错的效果(尽管也有概率掉坑就是了) | 
|  |      13northisland      2015-10-28 15:15:13 +08:00 请问你的这个 BANNER = r''' _____ _ __ _____ / ___/(_)___ ___ ____ / /__ / ___/_________ _____ \__ \/ / __ `__ \/ __ \/ / _ \\__ \/ ___/ __ `/ __ \ ___/ / / / / / / / /_/ / / __/__/ / /__/ /_/ / / / / /____/_/_/ /_/ /_/ .___/_/\___/____/\___/\__,_/_/ /_/ /_/ 是怎么生成的? | 
|  |      14MrGba2z      2015-10-28 22:32:52 +08:00 | 
|  |      15RickGray OP @northisland figlet |