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