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获取文件版本信息、公司名和产品名的方法
Oct 05 Python
使用Python生成url短链接的方法
May 04 Python
python在非root权限下的安装方法
Jan 23 Python
python @property的用法及含义全面解析
Feb 01 Python
Python collections中的双向队列deque简单介绍详解
Nov 04 Python
Python模块future用法原理详解
Jan 20 Python
GDAL 矢量属性数据修改方式(python)
Mar 10 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 Python
Python基于内置函数type创建新类型
Oct 22 Python
python 模拟在天空中放风筝的示例代码
Apr 21 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 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实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
jQuery使用元素属性attr赋值详解
2015/02/27 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
python基于queue和threading实现多线程下载实例
2014/10/08 Python
github配置使用指南
2014/11/18 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
如何理解Python中的变量
2020/06/01 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
销售提升方案
2014/06/07 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
英语辞职信怎么写
2015/02/28 职场文书
劳动仲裁调解书
2015/05/20 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
小学运动会入场词
2015/07/18 职场文书
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技