Python中tornado使用说明

tornado是一个网络具有异步功能的网络库。样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")

if __name__ == "__main__":
application = tornado.web.Application([
(r"/", MainHandler),
])
application.listen(8888)
tornado.ioloop.IOLoop.current().start()

运行上面的程序之后,然后打开浏览器输入:

1
localhost:8888

URL相关

1
protocol :// hostname[:port] / path / [;parameters] [?query] # fragment

protocol 协议
hostname 主机名
port 端口号
path 路径
parameters 参数
query 查询
fragment 信息片段

1
2
self.get_argument("text")
localhost:12308/spo_extract?text=你好

Get和post

都是向服务器提交数据,而且从服务器获取数据

1.区别:
get通过地址栏传输
post通过报文传输

2.传送长度:
get的参数有长度限制,受限于url长度
post没有限制

3.TCP数据包
GET产生一个
POST产生2个
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

FAQ

端口冲突(Address already in use)解决方法

  1. 我们在后端开发的过程中往往会在没有正常关闭某个正在执行的脚本或者程序而是直接关闭了Terminal(终端)或是通过其他方式的异常关闭导致了之前的端口实际上仍未被释放,这时候倘若我门想要再使用这个端口,就会抛出 “error:[Errno 98] Address already in use” 这样的异常。

  2. 这时候我们只需要找到正在利用这个端口的进程,并得到这个进程的PID,杀死这个PID对应的这个进程,就能够有效释放被占用的端口,后续再使用的时候就不会再抛出端口已经被占用的异常信息。

  3. 找到被占用的指定端口号所对应的进程信息并呈现,xxx处填写对应要查找的端口号:
    sudo lsof -i:xxx

4.关闭这个进程,xxx为PID:
sudo kill -9 xxx