从零开始写脚本,高效多线程Threadpool
Python的创始人为荷兰人吉多·范罗苏姆 (Guido van Rossum)。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是取自英国20世纪70年代首播的电视喜剧《蒙提.派森的飞行马戏团》(Monty Python's Flying Circus)。
做网络安全已经渐渐的离不开Python的身影,如果没有了Python,只能一个个手工去操作,而我们写Python脚本的用途就是解放我们的放松,全自动化的让Python脚本代替我们重复性以及高难度的工作。
0x01 什么是threadpool模块?
Python难道一个for循环完成不了我们的任务吗?答案是可以的,但是想要高效的运用到Python脚本,那还需要开线程,如果不知道线程的可以看下图所示。

由图所示,多线程可以更高效的工作,开多线程等于多个人同时工作,而单线程for循环只能一个人工作。
一个人工作肯定不及多个人工作,所以多线程等于开挂。
0x02 线程池
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。
线程池内可以有多个活跃线程,但是线程池内的线程是有限制的。
threadpool.ThreadPool = 线程池 (int)
0x03 制造请求
请求是投入线程池内必须要有的,请求可以附带投入线程池内要处理的数据,将这些数据分成单一的线程来处理,在线程池内这些线程都是独立完成的。
threadpool.makeRequests = 请求(func,data)
0x03 开始做一个小脚本
分批打印,间隔为一秒,等待处理为一秒。
import threadpool
import time
def ok(x):
time.sleep(1)
print(x)
pool=threadpool.ThreadPool(5)
request=threadpool.makeRequests(ok,[1,2,3,4,5,6,7,8,9,10])
for x in request:
pool.putRequest(x)
pool.wait()

浙公网安备 33010602011771号