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 23 Python
Pyhton中防止SQL注入的方法
Feb 05 Python
Python函数返回值实例分析
Jun 08 Python
Python父目录、子目录的相互调用方法
Feb 16 Python
python如何实现视频转代码视频
Jun 17 Python
python实现列表的排序方法分享
Jul 01 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
tensorflow 限制显存大小的实现
Feb 03 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
Python递归调用实现数字累加的代码
Feb 25 Python
python 浮点数四舍五入需要注意的地方
Aug 18 Python
Python操作Excel的学习笔记
Feb 18 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
PHP5 安装方法
2006/10/09 PHP
PHP_MySQL教程-第一天
2007/03/18 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
PHP面向对象程序设计实例分析
2016/01/26 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
php数组遍历类与用法示例
2019/05/24 PHP
jquery 使用点滴函数代码
2011/05/20 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
js禁止表单重复提交
2017/08/29 Javascript
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
Python延时操作实现方法示例
2018/08/14 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
django使用JWT保存用户登录信息
2020/04/22 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
教师党员整改措施
2014/10/24 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
2016教师节问候语
2015/11/10 职场文书
2016年心理学教育培训学习心得体会
2016/01/12 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
导游词之嵊泗列岛
2019/10/30 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python