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 相关文章推荐
python3实现读取chrome浏览器cookie
Jun 19 Python
python实现excel读写数据
Mar 02 Python
Python使用add_subplot与subplot画子图操作示例
Jun 01 Python
python生成密码字典的方法
Jul 06 Python
python实现海螺图片的方法示例
May 12 Python
基于Django静态资源部署404的解决方法
Jul 28 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
python实现ssh及sftp功能(实例代码)
Mar 16 Python
Python selenium爬虫实现定时任务过程解析
Jun 08 Python
Python+OpenCV检测灯光亮点的实现方法
Nov 02 Python
利用Python批量识别电子账单数据的方法
Feb 08 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日历[测试通过]
2008/03/27 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
跟老齐学Python之永远强大的函数
2014/09/14 Python
Python程序中设置HTTP代理
2016/11/06 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
PyQt5实现QLineEdit添加clicked信号的方法
2019/06/25 Python
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
pycharm安装及如何导入numpy
2020/04/03 Python
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
Android面试题及答案
2015/09/04 面试题
安全责任书范本
2014/04/15 职场文书
面试必备的求职信
2014/05/25 职场文书
庆国庆活动总结
2014/08/28 职场文书
会计试用期自我评价
2014/09/19 职场文书
项目战略合作意向书
2015/05/08 职场文书
教师考核鉴定意见
2015/06/05 职场文书
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers