python高并发异步服务器核心库forkcore使用方法
时间:2021-12-04 18:38:24
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以上的内核
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
mysql中普通索引和唯一索引的效率对比
![](https://img.aspxhome.com/file/UploadPic/201012/8/2010128165343945s.jpg)
详解python编译器和解释器的区别
微信公众平台开发教程⑤ 微信扫码支付模式介绍
![](https://img.aspxhome.com/file/2023/9/94499_0s.png)
如何Shrink Undo表空间,释放过度占用的空间
Web开发者的百科全书——Google DocType
微信小程序开发工具介绍
![](https://img.aspxhome.com/file/2023/1/58651_0s.jpg)
PHP中类静态调用和范围解析操作符的区别解析
ASP 千万级数据分页的存储过程
SQL SERVER EXPRESS 常见问题及解决办法
SQL Serve数据库到DB2连接服务器的实现过程全解
Python正则表达式介绍
![](https://img.aspxhome.com/file/2023/1/87571_0s.png)
通过python实现弹窗广告拦截过程详解
![](https://img.aspxhome.com/file/2023/8/71448_0s.png)
Django修改app名称和数据表迁移方案实现
Python实现模拟登录及表单提交的方法
Laravel操作redis和缓存操作详解
Python Web框架Flask中使用新浪SAE云存储实例
pjblog3相关日志功能(支持生成静态模式)
如何编制一个产生随机密码的函数?
python GUI库图形界面开发之PyQt5拖放控件实例详解
![](https://img.aspxhome.com/file/2023/9/64309_0s.png)