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实现测试磁盘性能的方法
Mar 12 Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 Python
win系统下为Python3.5安装flask-mongoengine 库
Dec 20 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
python-str,list,set间的转换实例
Jun 27 Python
详解基于django实现的webssh简单例子
Jul 17 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
Python 通过调用接口获取公交信息的实例
Dec 17 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
python openssl模块安装及用法
Dec 06 Python
virtualenv隔离Python环境的问题解析
Jun 21 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
php中通过curl smtp发送邮件
2012/06/05 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
JavaScript中校验银行卡号的实现代码
2016/12/19 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
Python生成随机验证码的两种方法
2015/12/22 Python
简单实现python画圆功能
2018/01/25 Python
Python装饰器用法实例总结
2018/02/07 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
日本语毕业生自荐信
2014/02/01 职场文书
学校食堂标语
2014/10/06 职场文书
老公保证书怎么写
2015/02/26 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
python自动化之如何利用allure生成测试报告
2021/05/02 Python
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
Python实现byte转integer
2021/06/03 Python