2016-09-02 4 views
0

Ich habe dieses Skript:Druck aktuelle Thread in Python 3

import threading, socket 

for x in range(800) 
    send().start() 

class send(threading.Thread): 
    def run(self): 
     while True: 
      try: 
       s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
       s.connect(("www.google.it", 80)) 
       s.send ("test") 
       print ("Request sent!") 
      except: 
       pass 

Und am Ort der "Request geschickt!" Ich möchte etwas drucken wie: "Anfrage gesendet!% S"% (die aktuelle Nummer des Threads, der die Anfrage sendet)

Was ist der schnellste Weg, es zu tun?

--SOLVED--

import threading, socket 

for x in range(800) 
    send(x+1).start() 

class send(threading.Thread): 
    def __init__(self, counter): 
     threading.Thread.__init__(self) 
     self.counter = counter 
    def run(self): 
     while True: 
      try: 
       s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
       s.connect(("www.google.it", 80)) 
       s.send ("test") 
       print ("Request sent! @", self.counter) 
      except: 
       pass 
+0

Mögliche Duplikate von [So finden Sie eine Thread-ID in Python] (http://stackoverflow.com/questions/919897/how-to-find-a-thread-id-in-python) – Rob

Antwort

1

Sie könnten Ihre Zählnummer (x, in diesem Fall), als Variable in Ihrer Sende Klasse übergeben. Beachten Sie aber, dass x bei 0 beginnen, nicht 1.

for x in range(800) 
    send(x+1).start() 

class send(threading.Thread): 
    def __init__(self, count): 
     self.count = count 

    def run(self): 
     while True: 
      try: 
       s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
       s.connect(("www.google.it", 80)) 
       s.send ("test") 
       print ("Request sent!"), self.count 
      except: 
       pass 

Oder, wie Rob oben in der anderen Frage kommentierte threading.current_thread() zufriedenstellend aussieht.

+1

In diesem Fall 'current_thread()' wird immer 'self' sein. –

+0

danke für die Antwort. Es wird ausgelöst: [code] raise RuntimeError ("thread.__ init __() nicht aufgerufen") RuntimeError: thread .__ init __() nicht aufgerufen [/ code] – Sperly1987

+0

gelöst durch Hinzufügen von "thread.Thread .__ init __ (self)" zu __init__ Funktion. danke – Sperly1987

1

Der einfachste Weg, dies zu tun ist, setName und getName zu verwenden, um Ihren Threads Namen zu geben.

import threading, socket 

for x in range(800) 
    new_thread = send() 
    new_thread.setName("thread number %d" % x) 
    new_thread.start() 

class send(threading.Thread): 
    def run(self): 
     while True: 
      try: 
       s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
       s.connect(("www.google.it", 80)) 
       s.send ("test") 
       print ("Request sent by %s!" % self.getName()) 
      except: 
       pass 

Sie können auch alle anderen Attribute zu send hinzufügen, die Sie den Überblick über Ihre Themen zu halten brauchen.

Verwandte Themen