python可以用来编写计算机网络程序吗_python实现strstr()利用Python的SocketServer框架编写网络服务程序...

本文介绍了Python的SocketServer模块,用于简化网络服务程序的编写。SocketServer提供了四种服务类,包括同步和异步处理模型。通过派生请求处理类并重写handle()方法,可以定制服务行为。示例展示了如何创建一个基于多线程的TCP服务器。要实现异步,可以结合ForkingMixIn或ThreadingMixIn。文章强调了多线程和多进程中的同步问题,并提供了相应示例代码。
摘要由CSDN通过智能技术生成

1.前言:

虽说用Python编写简单的网络程序很方便,但复杂一点的网络程序还是用现成的框架比较好。这样就可以专心事务逻辑,而不是套接字的各种细节。SocketServer模块简化了编写网络服务程序的任务。同时SocketServer模块也是Python标准库中很多服务器框架的基础。

2.网络服务类:

SocketServer提供了4个基本的服务类:

TCPServer针对TCP套接字流

UDPServer针对UDP数据报套接字

UnixStreamServer和UnixDatagramServer针对UNIX域套接字,不常用。

它们的继承关系如下:

+------------+

| BaseServer |

+------------+

|

v

+-----------+        +------------------+

| TCPServer |------->| UnixStreamServer |

+-----------+        +------------------+

|

v

+-----------+        +--------------------+

| UDPServer |------->| UnixDatagramServer |

+-----------+        +--------------------+

2.1异步处理:

这个四个服务类都是同步处理请求的。一个请求没处理完不能处理下一个请求。要想支持异步模型,可以利用多继承让server类继承ForkingMixIn 或 ThreadingMixIn mix-in classes。

ForkingMixIn利用多进程(分叉)实现异步。

ThreadingMixIn利用多线程实现异步。

3.请求处理类:

要实现一项服务,还必须派生一个handler class请求处理类,并重写父类的handle()方法。handle方法就是用来专门是处理请求的。该模块是通过服务类和请求处理类组合来处理请求的。

SocketServer模块提供的请求处理类有BaseRequestHandler,以及它的派生类StreamRequestHandler和DatagramRequestHandler。从名字看出可以一个处理流式套接字,一个处理数据报套接字。

4.总结用SocketServer创建一个服务的步骤:

1.创建一个request handler class(请求处理类),继承自BaseRequestHandler class并重写它的handle()方法,该方法将处理到的请求。

2.实例化一个server class对象,并将服务的地址和之前创建的request handler class传递给它。

3.调用server class对象的handle_request() 或 serve_forever()方法来开始处理请求。

一个基于SocketServer的服务器示例:from SocketServer import TCPServer,StreamRequestHandler

#定义请求处理类

class Handler(StreamRequestHandler):

def handle(self):

addr = self.request.getpeername()

print 'Got connection from ',addr

self.wfile.write('Thank you for connecting')

server = TCPServer(('',1234), handler)#实例化服务类对象

server.server_forever()#开启服务

5.实现异步,支持多连接

前面介绍服务类时提到过,四个基本的服务类默认是同步模型的。要想支持异步可以利用多继承从ForkingMixIn 或ThreadingMixInmix-in classes和一个基本的服务类继承来定义一个支持异步的服务类。比如:

class Server(ThreadingMixIn, TCPServer): pass

W WW.002pc .COM对《python实现strstr()利用Python的SocketServer框架编写网络服务程序》总结来说,为我们Python基础教程很实用。

ForkingMixIn 要考虑进程间的通信。ThreadingMixIn要考虑线程访问同一变量时的同步和互斥。

一个使用了多线程处理的服务器示例:from SocketServer import TCPServer, ThreadingMixIn, StreamRequestHandler

#定义支持多线程的服务类,注意是多继承

class Server(ThreadingMixIn, TCPServer): pass

#定义请求处理类

class Handler(StreamRequestHandler):

def handle(self):

addr = self.request.getpeername()

print 'Got connection from ',addr

self.wfile.write('Thank you for connection')

server = Server(('', 1234), Handler)#实例化服务类

server.serve_forever()#开启服务

更多:python实现strstr()利用Python的SocketServer框架编写网络服务程序

https://www.002pc.comhttps://www.002pc.com/python/1533.html

你可能感兴趣的服务程序,SocketServer,Python,编写,框架,网络

No alive nodes found in your cluster

0踩

0 赞

_state = ESP8266_CONNECTED; return; } else if (strstr(&esp8266_rx_buffer[esp8266_rx_buffer_tail], "SEND FAIL\r\n")) { esp8266_rx_buffer_tail += strlen("SEND FAIL\r\n"); esp826是的,Python可以实现对PDF文件的OCR识别,可以使用一些第三方库,如PyPDF2和6_state = ESP8266_DISCONNECTED; return; } } // 发送数据失败 esp8266_statetextract。其中PyPDF2用于读取PDF文件,将其转换为文本,而textract则可以对这 = ESP8266_ERROR; } // 定义esp8266发送AT指令的函数 void esp8266_send_at_command(const char些文本进行OCR识别,包括中文。 以下是一个基于Python实现对PDF文件的OCR识别的 *command) { // 发送AT指令到esp8266 strcpy(esp8266_tx_buffer, command); USART示例代码: ```python import textract # 读取PDF文件 pdf_file = open('example.pdf', 'rb') 1->TDR = esp8266_tx_buffer[esp8266_tx_buffer_head++]; while (esp8266_tx_buffer_head != esppdf_content = pdf_file.read() # 转换为文本 text = textract.process(pdf_content, method='tesseract', language='8266_tx_buffer_tail); // 等待esp8266返回OK或ERROR while (esp8266_rx_buffer_tail != espchi_sim') # 输出识别结果 print(text) ``` 其中,`method='tesseract'`表示使用tesseract进行OCR8266_rx_buffer_head) { if (strstr(&esp8266_rx_buffer[esp8266_rx_buffer_tail], "OK\r识别,`language='chi_sim'`表示识别中文。需要注意的是,这个方法需要安装tesseract\n")) { esp8266_rx_buffer_tail += strlen("OK\r\n"); if (esp8266_state == ESP826和相关的语言包,可以通过以下命令进行安装: ``` sudo apt-get install tesseract-ocr sudo apt6_INITIALIZING) { esp8266_state = ESP8266_READY; } else if (esp8266_state ==-get install libtesseract-dev sudo apt-get install tesseract-ocr-chi-sim ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值