Python 通过监听端口实现唯一脚本运行方式


Posted in Python onMay 05, 2020

我就废话不多说了,大家还是直接看代码吧

try:
 s = socket.socket()
 s.bind(('127.0.0.1', port))
except:
 log.info(' * already has an instance, so exit.')
 exit(0)

补充知识:Python:一个简单的tornado程序:监听服务器端口,访问时给浏览器返回一个字符串

一个简单的tornado程序

tornado是python里的一个模块,它是一种web服务器软件的开源版本

它作为web服务器,具有较出色的抗负载能力,它适用于用户量大,高并发,或者大量的HTTP持久连接的情况。

我们来看一段简单的程序代码

import tornado.web
import tornado.ioloop

class IndexHander(tornado.web.RequestHander):
  def get(self):
   self.write("hello world! My name is alien!")

if __name__ = "__main__":
 app = tornado.web.Application([
  (r"/", IndexHander)
 ])
 app.listen(8000)
 tornado.ioloop.IOLoop.current().start()

Python 通过监听端口实现唯一脚本运行方式

当我们运行这段程序时,在浏览器上输入ip+我们监听的端口就可以显示这样的效果:

那么我们现在逐句分析这段小代码:

1、

import tornado.web
import tornado.ioloop

首先要进行导入操作

这里的tornado.web是tornado的基础web框架模块

tornado.ioloop是tornado的核心I/O循环模块(也就是说,服务一起,就不会自己关闭了)ioloop封装了linux的epoll和BSD的kquene,这个循环模块是tornado高效的基础

2、

class IndexHander(tornado.web.RequestHander):
  def get(self):
   self.write("hello world! My name is alien!")

这里是创建了一个类,继承了tornado.web.RequestHander类,其实就是一个业务处理类,用于接收请求的

里面的get函数就是处理get请求的

write函数这里返回了一个字符串,也就响应信息为这段字符串

3、

if __name__ = "__main__":

这段python代码就是当入口函数为当前文件时,执行以下代码

4、

app = tornado.web.Application([
  (r"/", IndexHander)
 ])

这段代码是利用tornado.web下的Application类实例化出一个对象,这个对象名叫app,(r"/", IndexHander)这个是路由映射

Application类是tornado.web框架的核心应用类,是与服务器对应的接口,它里面保存了路由映射表

5、

app.listen(8000)

这里的listen是绑定了监听端口8000

用Application类创建出来的对象app中,有一个listen方法,因此可以直接调用listen

所以listen就是创建一个http服务器后绑定监听端口

注意注意:

这里的listen只是绑定了端口,并没有开启监听

6、

tornado.ioloop.IOLoop.current().start()

这里是启动该实例的I/O循环

IOLoop.current()返回了当前线程的ioloop实例,也就是返回了一个对象?当前线程读写操作的对象

IOLoop.start()启动了ioloop实例的I/O循环,等待客户端的链接

注意注意:

IOLoop.start()才开启了监听,刚刚上面的listen是没有开启监听的

以上这篇Python 通过监听端口实现唯一脚本运行方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python逐行读取文件内容的三种方法
Jan 20 Python
使用pdb模块调试Python程序实例
Jun 02 Python
Python中的错误和异常处理简单操作示例【try-except用法】
Jul 25 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
python异步存储数据详解
Mar 19 Python
Python中print和return的作用及区别解析
May 05 Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 Python
详解python itertools功能
Feb 07 Python
python 解决selenium 中的 .clear()方法失效问题
Sep 01 Python
Python如何使用ConfigParser读取配置文件
Nov 12 Python
python 如何在测试中使用 Mock
Mar 01 Python
python2.7使用scapy发送syn实例
May 05 #Python
python 使用raw socket进行TCP SYN扫描实例
May 05 #Python
Python之变量类型和if判断方式
May 05 #Python
Python实现CAN报文转换工具教程
May 05 #Python
python TCP包注入方式
May 05 #Python
python构造IP报文实例
May 05 #Python
python3通过udp实现组播数据的发送和接收操作
May 05 #Python
You might like
织梦模板标记简介
2007/03/11 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
jQuery学习笔记之jQuery的DOM操作
2010/12/22 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
Angular4 ElementRef的应用
2018/02/26 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
python可以用哪些数据库
2020/06/22 Python
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
工程造价管理专业大专生求职信
2013/10/06 职场文书
质量月活动策划方案
2014/03/10 职场文书
12岁生日演讲稿
2014/05/14 职场文书
运动会的口号
2014/06/09 职场文书
小组口号霸气押韵
2015/12/24 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
pycharm debug 断点调试心得分享
2021/04/16 Python
Django一小时写出账号密码管理系统
2021/04/29 Python
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers