0

I've got a little problem while I'm trying to create a threaded socket connection to multiple tcp servers as a client.

def request(ip, port, packet):
    print "try"
    try: 
        print "create socket..."
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        print "connect..."
        sock.connect((ip, port))
        print "send..."
        sock.send(packet)
        print "recv..."
        d = sock.recv(10240)
        print "parse..."
        resp = parse_response(d)
        sock.close()
        return resp
    except:
        return

def split_list(l, parts):
    newlist = []
    splitsize = 1.0/parts*len(l)
    for i in range(parts):
        newlist.append(l[int(round(i*splitsize)):int(round((i+1)*splitsize))])
    return newlist

def check(hosts):
    for host in hosts:
        host = host.strip().split(":")
        try: 
            request(host[0],host[1], "X")
        except:
            return

def work(list):
    targetlist = split_list(list, 1)
    for ips in targetlist:
        threading.Thread(target=check, args=(ips,)).start()


arr = ["192.168.15.2:99","192.168.15.3:99","192.168.15.4:99","192.168.15.5:99"]

work(arr)

the response look like:

create socket...
connect...
try
create socket...
connect...
try
create socket...
connect...
try
create socket...
connect...

So the question is, why I can't create socket connection in threads?

edit

i have founded a better way to solve this problem:

< threading.Thread(target=check, args=(ips,)).start()

replace with

p = Process(target=check, args=(ips,)) p.daemon = True p.start()

This will create a own process and wont lock like using the threads option

jimbo
  • 45
  • 2
  • 7

0 Answers0