Давно ничего не писал, совсем разленился, да и писать не о чём. Зашёл тут недавно глупый спор о скорости работы сокетов на perl и python, пришлось написать простой многопоточный скриптик. Пригодится может кому, для изучения python. В результате мой метод оказался хитрее и быстрей
# coding:utf-8
# author: Rushter
# site: http://klipner.ru
import socket,Queue,threading
from time import time
queue = Queue.Queue()
HOST = "localhost"
COUNT = 1000
THREADS=100
TIMEOUT = 0.01
def worker():
global queue
while True:
try:
target = queue.get_nowait()
except Queue.Empty:
return
check(target)
def check(port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(TIMEOUT)
try:
sock.connect((HOST, port))
except:
return
print port
sock.close()
def main():
t1 = time()
for i in xrange(COUNT):
queue.put(i)
for _ in xrange(THREADS):
thread_ = threading.Thread(target=worker)
thread_.start()
while threading.active_count() >1:
pass
t2 = time()
print t2-t1
main()
Категория:
Programming, 2.6, cheker, ports, Python, socket, threading, многопоточный