文档章节

python 线程池,多线程端口扫描

__SuperZero
 __SuperZero
发布于 2014/08/08 22:52
字数 215
阅读 45
收藏 1
#!/usr/bin/env python
#--superzero
#--2014-08-04

import sys
import socket
import threading
import Queue
import time

def scanIt(host,port):
	s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
	try:
		s.connect((host,port))
		res = host+'\'s ' + str(port)+ ' OPEN!' 
	except:
		#res = ''
		res = ' '
		#print sys.exc_info()
                pass
	s.close()
	return res


class MyThread(threading.Thread):
	def  __init__(self, workQueue, resultQueue, timeout=1,  *args, **kwargs):
		threading.Thread.__init__(self)
		self.workQueue =  workQueue
		self.resultQueue = resultQueue
		self.timeout = timeout
		self.kwargs = kwargs
		self.args = args
		self.setDaemon(False)
		self.start()

	#overwrite run()
	def run(self):
		while True:
			try:
				callable, host, port = self.workQueue.get(timeout=self.timeout)
                                result = callable(host,port)
			        if result != ' ':
                                   # result = callable(host, port)
				    self.resultQueue.put(result)
			except Queue.Empty:
				break
			except:
				print sys.exc_info()
				#raise
				pass

class ThreadPool(object):
	def __init__(self ,num_of_threads=5):
		self.workQueue = Queue.Queue()
		self.resultQueue =Queue.Queue()
		self.num_of_threads = num_of_threads
		self.threads = []
		self.createThreadPool(self.num_of_threads)

	def createThreadPool(self,num_of_threads):
		for i in range(num_of_threads):
			thread = MyThread(self.workQueue, self.resultQueue)
			self.threads.append(thread)

	def waitThreadComplet(self):
		while len(self.threads):
			thread = self.threads.pop()
			if thread.isAlive():
				thread.join()

	def add_job(self, callable, *args):#, **kwargs):
		self.workQueue.put((callable, args[0], args[1]))#, kwargs)
		#self.resultQueue.put( 'add done')

def main():
	w = ThreadPool(5)
	print 'start..',time.ctime()
	host = '127.0.0.1'

	for port in range(1,65535):
		w.add_job(scanIt, host, port)

	w.waitThreadComplet()

	while w.resultQueue.qsize():
		print w.resultQueue.get() 
	print 'end...',time.ctime()


if __name__ == '__main__':
	main()


© 著作权归作者所有

__SuperZero
粉丝 0
博文 24
码字总数 13137
作品 0
海淀
私信 提问
Python 线程池端口扫描低效问题

今天在开源中国上看到了 kdszh 的端口扫描程序,就是利用socket链接状态判断端口是否打开,由于他的是单线程的,我查资料改成了线程池的,但是比对之后发现效率一点没有提升(这里我没用专业...

Xsank
2012/10/29
1K
9
一篇文章搞定Python多进程(全)

公众号:pythonislover 前面写了三篇关于python多线程的文章,大概概况了多线程使用中的方法,文章链接如下: 一篇文章搞懂Python多线程简单实现和GIL - https://mp.weixin.qq.com/s/Hgp-x-...

南山yrg
05/05
0
0
Tornado实现多线程、多进程HTTP服务

背景 线上有一个相关百科的服务,返回一个query中提及的百科词条。该服务是用python实现的,以前通过thrift接口访问,现要将其改为通过HTTP访问。之前没有搭建HTTPServer的经验,因此想用pyt...

LUIS1983
2018/09/04
97
0
理解 Python 中的多线程

我们将会看到一些在 Python 中使用线程的实例和如何避免线程之间的竞争。 你应当将下边的例子运行多次,以便可以注意到线程是不可预测的和线程每次运行出的不同结果。声明:从这里开始忘掉你...

大数据之路
2013/11/27
11.6K
0
12道必会的Python面试题,附详细讲解

无论是应聘Python方向的web开发,还是爬虫工程师,或是数据分析,还是自动化运维,都涉及到一些基础的知识!小编挑了一些Python的基础面试题,看看你能不能的答上来,也许面试的同学用的着!...

诸葛玥
2018/06/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

反射

类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化来实现对这个类进行初始化 加载: 将class文件读入内存, 并为之创建一个Class对象; 任何类...

凹凸凸
46分钟前
4
0
jQuery与Ajax的应用

jQuery与Ajax的应用 Ajax Ajax 即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,异步交互,传输的数据为XML.是一种在无需重新加载...

cjy_lean
57分钟前
6
0
查漏补缺,JVM系列:(JVM内存组成及分配)

java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”...

小刀爱编程
59分钟前
5
0
Java实现哈希表

Java实现哈希表 基本概念 哈希表:Hash Table,也称为散列表。在待存放的数据中定义一个关键字k,通过一个映射关系f,将k映射到一个地址中,这个地址称为散列地址。之后查找该记录时,不用再...

盒饭加鸡腿
今天
5
0
透彻讲解:并发编程的优缺点

一直以来并发编程对于刚入行的小白来说总是觉得高深莫测,于是乎,就诞生了想写点东西记录下,以提升理解和堆并发编程的认知。为什么需要用的并发?凡事总有好坏两面,之间的trade-off是什么...

李红欧巴
今天
32
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部