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中的RSS处理
Apr 13 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
May 04 Python
详解python如何调用C/C++底层库与互相传值
Aug 10 Python
在centos7中分布式部署pyspider
May 03 Python
python format 格式化输出方法
Jul 16 Python
python 重命名轴索引的方法
Nov 10 Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
Feb 28 Python
利用python生成照片墙的示例代码
Apr 09 Python
Python使用configparser读取ini配置文件
May 25 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
Django框架实现在线考试系统的示例代码
Nov 30 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
论建造顺序的重要性
2020/03/04 星际争霸
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
AJAX的使用方法详解
2017/04/29 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
JQuery团队打造的javascript单元测试工具QUnit介绍
2010/02/26 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
python正则表达式re模块详细介绍
2014/05/29 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
python跨文件使用全局变量的实现
2020/11/17 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
意大利团购网站:Groupon意大利
2016/10/11 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
June Jacobs尊积帕官网:知名的spa水疗护肤品牌
2019/03/21 全球购物
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
Sony C++笔试题
2013/03/10 面试题
入党积极分子思想汇报范文
2014/01/05 职场文书
本溪水洞导游词
2015/02/11 职场文书
一个都不能少观后感
2015/06/04 职场文书
神秘岛读书笔记
2015/07/01 职场文书
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python