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入门指引
Apr 01 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
May 25 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
python代码 输入数字使其反向输出的方法
Dec 22 Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 Python
Django中celery执行任务结果的保存方法
Jul 12 Python
Python文件读写w+和r+区别解析
Mar 26 Python
Django Xadmin多对多字段过滤实例
Apr 07 Python
Python pickle模块常用方法代码实例
Oct 10 Python
python脚本定时发送邮件
Dec 22 Python
删除pycharm鼠标右键快捷键打开项目的操作
Jan 16 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 星际争霸
大师制作的中短波矿石收音机
2020/04/02 无线电
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
php中explode函数用法分析
2014/11/15 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
PDO::inTransaction讲解
2019/01/28 PHP
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
jquery自定义表格样式
2015/11/23 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
python3序列化与反序列化用法实例
2015/05/26 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
Python对数据库操作
2016/03/28 Python
python中的二维列表实例详解
2018/06/19 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
竞聘书怎么写,如何写?
2014/03/31 职场文书
财务情况说明书范文
2014/05/06 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
golang json数组拼接的实例
2021/04/28 Golang
python spilt()分隔字符串的实现示例
2021/05/21 Python