python高并发异步服务器核心库forkcore使用方法


Posted in Python onNovember 26, 2013

1 拷贝下面的代码到一个文件,并命名为forkcore.py

import os
import threading
import select
import socket
class ds_forkcore(object):
    #async IO(epoll)
    def ds_epoll(self):
        epoll=select.epoll()
        epoll.register(self.s.fileno(),select.EPOLLIN|select.EPOLLET)
        while 1:
            epoll_list=epoll.poll()
            for fd,_events in epoll_list:
                if fd==self.s.fileno():
                    conn,addr=self.s.accept()
                    print "Current process's pid is "+str(os.getpid())
                    self.worker(conn,addr)
    #multi_thread
    def ds_thread(self,thread_num=100):
        for _ in range(0,thread_num):
            t=threading.Thread(target=self.ds_epoll)
            t.setDaemon(1)
            t.start()
            t.join()
    #multi_process
    def ds_process(self,child_process_num=8):
        pid=os.getpid()
        print "Main process start, pid is "+str(pid)
        for _ in range(0,child_process_num):
            if pid==os.getpid():
                if os.fork():
                    pass
                else:
                    print "Worker process start, pid is "+str(os.getpid())
                    self.ds_thread()
    #init function
    def __init__(self,worker,port=3333):
        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        s.bind(("",port))
        s.listen(50000)
        self.s=s
        self.worker=worker
        self.ds_process()

2 编写自己的代码

1> 导入forkcore库。

2> 定义worker函数,worker函数需要两个参数,conn代表客户端连接的socket,addr是(ip,port)的元组。

3> 直接使用forkcore.ds_forecore(worker,port=5555)即可,port用于指定监听端口。

import forkcore
if __name__=="__main__":
    def worker(conn,addr):
        print "Message from ("+str(addr[0])+":"+str(addr[1])+"): "+conn.recv(1024)[0:-1]
    forkcore.ds_forkcore(worker,port=5555)

注:需要linux 2.6以上的内核

Python 相关文章推荐
在Python程序中操作文件之isatty()方法的使用教程
May 24 Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 Python
Python程序中的观察者模式结构编写示例
May 27 Python
Python创建xml文件示例
Mar 22 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
Python 爬虫之Beautiful Soup模块使用指南
Jul 05 Python
Win8下python3.5.1安装教程
Jul 29 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
Python中注释(多行注释和单行注释)的用法实例
Aug 28 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
UI自动化定位常用实现方法代码示例
Oct 27 Python
使用numpngw和matplotlib生成png动画的示例代码
Jan 24 Python
跨平台python异步回调机制实现和使用方法
Nov 26 #Python
python连接池实现示例程序
Nov 26 #Python
使用python BeautifulSoup库抓取58手机维修信息
Nov 21 #Python
python BeautifulSoup使用方法详解
Nov 21 #Python
python装饰器使用方法实例
Nov 21 #Python
tornado框架blog模块分析与使用
Nov 21 #Python
python迭代器的使用方法实例
Nov 21 #Python
You might like
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
php for 循环语句使用方法详细说明
2010/05/09 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
2014/05/08 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
2016/01/28 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
python中的__slots__使用示例
2015/02/26 Python
Python记录详细调用堆栈日志的方法
2015/05/05 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
简单了解python反射机制的一些知识
2019/07/13 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
用友笔试题目
2016/10/25 面试题
关于护士节的演讲稿
2014/05/26 职场文书
敬老院标语
2014/06/27 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
死亡证明书样本说明
2014/10/18 职场文书
热血教师观后感
2015/06/10 职场文书
大学生干部培训心得体会
2016/01/06 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
移除Selenium中window.navigator.webdriver值
2022/06/10 Python