在python 3中打印当前线程

时间:2016-09-02 07:25:37

标签: python multithreading sockets python-3.x

我有这个脚本:

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

在“请求发送!”的地方我想打印类似:“请求发送!%s”%(发送请求的线程的当前号码)

最快的方法是什么?

- 解决 -

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

3 个答案:

答案 0 :(得分:1)

您可以将计数编号(在本例中为x)作为发送类中的变量传递。请注意,x将从0开始,而不是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

或者,正如Rob在上面的另一个问题中所评论的那样,threading.current_thread()看起来很令人满意。

答案 1 :(得分:1)

最简单的方法是使用setNamegetName为您的主题命名。

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

您还可以向send添加您需要跟踪线程的任何其他属性。

答案 2 :(得分:0)

只是如何获取线程ID的附带答案(可能不直接回答该问题,而是帮助其他人): 在python 3.3+中,您可以简单地进行操作:

import threading

threading.get_ident()

了解更多:here