python 杂记 网络

参考资料:https://www.cnblogs.com/gareth-yu/p/9097943.htmlimport selectors
import socket

sel = selectors.DefaultSelector()

def accept(sock, mask):              # sock相当于key.fileobj
    conn, addr = sock.accept()  # Should be ready
    print(‘accepted‘, conn, ‘from‘, addr)
    conn.setblocking(False)
    sel.register(conn, selectors.EVENT_READ, read)

def read(conn, mask):
    data = conn.recv(1000)  # Should be ready
    if data:
        print(‘echoing‘, repr(data), ‘to‘, conn)
        conn.send(data)  # Hope it won‘t block
    else:
        print(‘closing‘, conn)
        sel.unregister(conn)
        conn.close()

sock = socket.socket()
sock.bind((‘localhost‘, 1234))
sock.listen(100)
sock.setblocking(False)
sel.register(sock, selectors.EVENT_READ, accept)

while True:
    events = sel.select()     # 根据系统是否支持,使用epoll还是select,优先epoll。默认阻塞,有活动连接就返回活动的连接列表
    for key, mask in events:
        callback = key.data    # 相当于回调accept
        callback(key.fileobj, mask)  # key.fileobj相当于建立连接后的conn

select是不断轮询去监听的socket,socket个数有限制,一般为1024个(文件描述符为1024,该值可以修改);随着文件描述符数量增加,轮询一回成本增加。
poll采用轮询方式监听,只不过没有个数限制;
epoll不采用轮询方式去监听,而是当socket有变化时通过回调的方式主动告知用户进程;无最大链接数的限制

selector这个模块允许高级别和高效的I/O多路复用,建立在select模块之上,相当于epoll。如果不是对精确OS级别的原语控制,推荐使用这个模块

=============================

select是不断轮询去监听的socket,socket个数有限制,一般为1024个(文件描述符为1024,该值可以修改);随着文件描述符数量增加,轮询一回成本增加。
poll采用轮询方式监听,只不过没有个数限制;
epoll不采用轮询方式去监听,而是当socket有变化时通过回调的方式主动告知用户进程;无最大链接数的限制

selector这个模块允许高级别和高效的I/O多路复用,建立在select模块之上,相当于epoll。如果不是对精确OS级别的原语控制,推荐使用这个模块

原文地址:https://www.cnblogs.com/testzcy/p/11181758.html

时间: 2024-08-04 14:32:49

python 杂记 网络的相关文章

Windows 环境下运用Python制作网络爬虫

import webbrowser as web import time import os i = 0 MAXNUM = 1 while i <= MAXNUM: web.open_new_tab('要刷的网络地址') os.system('taskkill /F /IM 浏览器文件名(chrome.exe)') i += 1 else: print 'happly day!' 代码和简单只要一个第三方的函数和调用系统的文件就OK了.记住给要刷的次数定值,不然电脑就不好受了! Windows

python 杂记

Python 杂记,是自己经常联系和写脚本是使用的一些小的语句 1:时间 import datetime #获取当前时间 print datetime.datetime.now() #获取昨天的时间 time = datetime.datetime.today()-datetime.timedelta(1) #格式化时间输出 print time.strftime('%Y%m%d') 2:

Python 入门网络爬虫之精华版

转载 宁哥的小站,总结的不错 Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下. 首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:宁哥的小站-网络爬虫 当我们在浏览器中输入一个url后回车,后台会发生什么?比如说你输入http://www.lining0806.com/,你就会看到宁哥的小站首页. 简单来说这段过程发生了以下四个步骤: 查找域名对应的IP地址. 向IP对应的服务器发送请求. 服务

Python学习笔记(2)---Python杂记

Python杂记: 自然字符串,在字符串前加上r:将转义符号原样保留. 列表:[ ] 定义,存储一连串元组的容器.元素从0开始,可以修改 元组:用()定义, 不可修改 集合:set(元素) set(a) 除去重复元素 字典 : {'key':'value'} 对象序列化:对于持久性存储的对象需要序列化 极客学院:http://www.jikexueyuan.com/course/699.html

使用python访问网络上的数据

这两天看完了Course上面的: 使用 Python 访问网络数据 https://www.coursera.org/learn/python-network-data/ 写了一些作业,完成了一些作业.做些学习笔记以做备忘. 1.正则表达式 --- 虽然后面的课程没有怎么用到这个知识点,但是这个技能还是蛮好的. 附上课程中列出来的主要正则表达式的用法: Python Regular Expression Quick Guide ^ Matches the beginning of a line

python编写网络抓包分析脚本

python编写网络抓包分析脚本 写网络抓包分析脚本,一个称手的sniffer工具是必不可少的,我习惯用Ethereal,简单,易用,基于winpcap的一个开源的软件 Ethereal自带许多协议的 decoder,但是它的架构并不灵活,如果你要加入一个自己定义的的解码器,得去修改Ethereal的代码,再重新编译,相当的烦琐 对于一般的明文协议,没有什么问题,但是对于加密协议,比如网络游戏,客户端程序一般会在刚连接上的时候,发送一个随机密钥,而后的报文都会用这个密钥进 行加密,诸如此类.要想

【Python】网络编程

1.TCP编程 2.SocketServer模块 3.Twisted框架 4.UDP编程 1.TCP编程--TCP是面向连接的,其一般的设计如下: # encoding:utf-8 ''' Created on 2014-6-20 @author: Administrator ''' from socket import socket, AF_INET, SOCK_STREAM import time import threading class SockServer(object): def

【Python】网络爬虫(一):pyquery一瞥

1.pyquery简介 python中的pyquery模块语法与jquery相近,可用来解析HTML文件.官方文档地址:https://pythonhosted.org/pyquery/ .通过HTML中的标签.id.给定的索引等来获取元素,使得解析HTML文件极为方便. 2.实例 2.1 爬取豆瓣电影页面中主演 右键chrome中的审查元素,观察到主演的标签为<a href="/celebrity/1005773/" rel="v:starring">

Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)

1. 项目背景 在Python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间太多了(见上图),从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作中. 这个项目推出以后受到很大关注,因为开放源码,大家可以在现成源码基础上进一步开发.然而,Python3和Python2是有区别的,<Python即时网络爬虫项目: 内容提取器的定义> 一文的源码无法在Python2.7下使用,本文将发布一个Python2.7的内容提取器. 2.