线程启动时没有调用它的start方法

时间:2013-12-26 16:14:33

标签: multithreading python-3.x

当我想到这个时,我会问另一个问题。 请看一下这段代码:

import threading
from http.server import HTTPServer, SimpleHTTPRequestHandler
class Server(threading.Thread):
    def __init__(self, name, address='127.0.0.1',port=8080):
        threading.Thread.__init__(self, name=name)
        self.address = address
        self.port=port
        HandlerClass = SimpleHTTPRequestHandler
        ServerClass = HTTPServer
        self.httpd = ServerClass((address, port), HandlerClass)

    def run(self):
        self.httpd.serve_forever()

    def shutdown(self):
        self.httpd.shutdown()
        self.httpd.socket.close()

httpd_thread= Server("http",'127.0.0.1',30820)
httpd_thread.start()

它创建一个http服务器,在与脚本相同的目录中提供文件 它工作正常但我无法理解为什么它工作,因为我在启动线程时没有使用run()方法,
期待写一些东西来调用run方法,但它只是通过启动线程来工作 我想知道为什么。
谢谢。
P.S:我正在使用python 3.3。

1 个答案:

答案 0 :(得分:1)

问题是,如果您调用run方法,则在同一个线程中运行该方法。 start方法首先创建一个新线程,然后在该线程中执行run方法。这样,线程创建就会被抽象出来。

来自start的文档:

    """Start the thread's activity.

    It must be called at most once per thread object. It arranges for the
    object's run() method to be invoked in a separate thread of control.

    This method will raise a RuntimeError if called more than once on the
    same thread object.

    """