关于单线程多任务刚开始的理解是有偏差的,并且偏差的很大:以为是在单个线程中实现请求并发;
随后写了段代码测试了一下,发现不是这样的:
代码如下:
from twisted.internet import protocol, reactor, defer
import dbconsolethread,time
PORT = 5001
class SMGServProtocol(protocol.Protocol):
def connectionMade(self):
print 'client connected port:',self.transport.getPeer().host
def dataReceived(self, data):
try:
if data:
print 'data:',data
defer = self.factory.dataConsole(data)
defer.addErrback(self.transport.loseConnection())
defer.addCallback(self.repConsole(returndata))
except:
self.transport.loseConnection()
def repConsole(self,returndata):
print 'returndata:',returndata
def connectionLost(self, reason):
print 'client connected lost'
print reason
class SMGServFactory(protocol.ServerFactory):
protocol = SMGServProtocol
def __init__(self):
self.dbcontrol = dbconsolethread.DBcontral()
def dataConsole (self, data):
return defer.succeed(self.loadData())
def loadData(self):
time.sleep(3)
return 'sleep over'
if __name__ == '__main__':
reactor.listenTCP(PORT, SMGServFactory())
reactor.run()
然后在cmd下向服务器端请求,发现是一次只能处理一个,只有第一个处理完毕,程序才会接收第二个请求;
而我原来的认为是:程序最起码能够接收第二次发送的请求数据,接收之后才进入等待第一个请求处理完毕的时间
测试之后的结果是:对于第一次请求没有处理完成前提下的第二个请求,程序是根本不接收的。只有等到第一个请求处理完毕
才会接收下面的请求数据。
而所谓的并发,也只是在定义了 defer.addCallback(self.repConsole(returndata))方法之后,调用
reactor.callback方法才会同时指定多长时间之后调用,才会进入并发执行状态
那么所谓的单线程多任务是什么意思呢?
首先得明白,是单线程,那么从计算机本身的原理来讲,在单个线程中,是不可能实现并发的,那么就可以总结为,单线程中的多任务是纵向的多任务
而不是横向的。
在一个线程中,纵向执行多个任务。而如果想让某个任务并发执行,那么是可以利用reactor去实现并发的;前提是定义了defer的addcallback方法
提示:以上是鄙人的学习总结,如有错误之处,还望各位勘正,本文之所以进入论坛,也是为了听取python大牛们意见的
分享到:
相关推荐
python多线程库Twisted,许多python库都以来twisted,但是用pip很难安装成功,可以下载后直接用pip install twisted来安装。
第一部分:Twisted理论基础 第二部分:异步编程初探与reactor模式 第三部分:初步认识Twisted 第四部分:由Twisted支持的诗歌客户端 第一个twisted支持的诗歌服务器 第一滴心血 第五部分:由Twisted支持的诗歌...
python网络框架twisted教程,事件驱动编程是一个编程范式, 这个程序是由外部事件来决定。通过事件循环及当事件发生时触发回调事件的使用是它的特点。另外两种常见的编程范式是(单线程)同步与多线程编程。
BurstLink, 基于 Twisted的假多连接代理 BurstLink一种基于 Twisted的假多连接注释这是一个测试版,可能有 Bug当前不支持支持加密传输安装客户端 Windows安装 python 2.7安装 Twisted 和 zope从下载这里文件
Twisted Info Twisted入门教程源码
twisted资料twisted资料twisted资料
如果你没有很多时间或者耐心的话,这个系列的文章不太适合你. 不过,如果你对异步编程了解很少的话,相信一个简短的介绍也不让你完全明白,当然如果你是天才除外.我学习和使用twisted已经好几年了,通过这几年的学习和...
Twisted与异步编程入门,最好的入门资源。
Python Twisted模块 10.2.0Python Twisted模块 10.2.0Python Twisted模块 10.2.0Python Twisted模块 10.2.0Python Twisted模块 10.2.0Python Twisted模块 10.2.0
Twisted Network Programming Essentials,一本介绍socket异步编程框架twisted
twisted网络通信模型
The Twisted Documentation 电子版 pdf twisted 框架 网络编程
Twisted Python事件驱动网络框架
网络编程中我们越来越感觉twisted的强大,本教材是一本很好的twisted入门级教材
人工智能-项目实践-python-一个基于django + twisted的 计划任务后台任务调度项目 crondeamon是用来通过web管理计划任务及后台任务的项目, 其功能相当于supervisor+crontab, 基于twisted django 框架。通过...
twisted 异步教程,比较全面的介绍了twisted框架,中文版本
Twisted Network Programming Essentials 2nd Edition BOOK DESCRIPTION Get started with Twisted, the event-driven networking framework written in Python. With this introductory guide, you’ll learn the...
twisted系列教程,中文翻译,很好的学习教程
twisted官方文档