python : threads do not work properly in daemon

标签 python multithreading

我正在编写一个简单的脚本来检查 SSH 连接,但我无法理解为什么它卡在一个线程上。

class myThread(threading.Thread):
    def __init__(self, hostname ):
         threading.Thread.__init__(self)
         self.hostname = hostname
    def run(self):
        return self.doSSH(self.hostname)

    def doSSH(self,hostname):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((hostname, 22))
        result = s.recv(1024)
        if re.findall(r'^SSH.+?SSH.+',result) :
            return "Up"
        else :
            return "Down"

def main():
    q = Queue.Queue()
    completeHostlist = ["host1","host2","google.com","host3"]
    for hostname in completeHostlist:
        thread =  myThread(hostname)
        thread.daemon = True
        q.put_nowait(thread.run())
    q.get_nowait()

我不明白为什么这个脚本在 google.com 上挂起?我希望它生成守护线程并继续使用 host3。一旦完成 host3,它就必须终止与 Google 的线程并返回结果。我做错了什么?

我已经了解了 run() 和 start()。无论如何,这没有按预期工作,在所有 host[1-3] 线程启动后,脚本卡在 google 线程上,等待它结束。应该在脚本末尾杀死它吗?

我应该使用多处理而不是多线程来为每个主机生成单独的进程吗?

最佳答案

在您的代码中,您执行q.put_nowait(thread.run())。这会立即在当前线程上运行 ssh 。您需要调用线程特定的方法来启动线程。您需要调用thread.start()

不确定您正在使用队列做什么。

关于 python : threads do not work properly in daemon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20404226/

相关文章:

python - 用于检查矩阵中行/列中的 5 的更好算法

windows - 多线程:事件驱动与消息驱动

python - 将 win32com 与多线程一起使用

java - java程序中两个线程之间的延迟

python - np.arange 无法按预期使用浮点参数

python - 在另一个函数中用作参数时,如何将自定义 Python 对象表示为字符串?

python - 将值分配给 Numpy 数组中的不同索引位置

python - 我怎么能 "listen"内部主板扬声器上的声音

multithreading - 使用 boost::lockfree::spsc_queue 时需要内存屏障吗?

c++ - cout on extra thread - 线程安全