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中使用SAX解析xml实例
Nov 21 Python
详谈python read readline readlines的区别
Sep 22 Python
Python操作json的方法实例分析
Dec 06 Python
python爬虫获取新浪新闻教学
Dec 23 Python
python 处理telnet返回的More,以及get想要的那个参数方法
Feb 14 Python
numpy数组广播的机制
Jul 12 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
pytorch SENet实现案例
Jun 24 Python
快速创建python 虚拟环境
Nov 28 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 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 咖啡文化
程序员编程十条戒律
2009/07/09 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
Python实现身份证号码解析
2015/09/01 Python
读取本地json文件,解析json(实例讲解)
2017/12/06 Python
用python实现对比两张图片的不同
2018/02/05 Python
分享vim python缩进等一些配置
2018/07/02 Python
python将txt文件读取为字典的示例
2018/12/22 Python
python中partial()基础用法说明
2018/12/30 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
物流仓储实习自我鉴定
2013/09/25 职场文书
电话销售经理岗位职责
2013/12/07 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
宣传普通话标语
2014/06/27 职场文书
个人股份合作协议书
2014/10/24 职场文书
交心谈心活动总结
2015/05/11 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
一文搞懂php的垃圾回收机制
2021/06/18 PHP
React自定义hook的方法
2022/06/25 Javascript