当我想到这个时,我会问另一个问题。 请看一下这段代码:
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。
答案 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.
"""