WEB开发网
开发学院软件开发Python 可爱的 Python: 用 Python 生成器实现“轻便线程”... 阅读

可爱的 Python: 用 Python 生成器实现“轻便线程”

 2007-03-29 12:04:49 来源:WEB开发网   
核心提示: 您可以实现更多内容,而这是个好的起点,可爱的 Python: 用 Python 生成器实现“轻便线程”(8),线程优先级在简单的示例中,所有线程都获得调度程序同等的关注,当然,轻便线程与一些大家更熟知的流机制相比速度可能非常快,至少有两种普通方法可以实现调优程度更好的线程优先级系统,一个优

您可以实现更多内容,而这是个好的起点。

线程优先级

在简单的示例中,所有线程都获得调度程序同等的关注。至少有两种普通方法可以实现调优程度更好的线程优先级系统。一个优先级系统可以只对“高优先级”线程投入比低优先级线程更多的注意力。我们可以用一种直接的方式实现它,就是创建一个新类 PriorityThreadPool(ThreadPool) ,这个类在线程迭代期间更频繁地返回更重要的线程。最简单的方法可能会在 .__getitem__() 方法中连续多次返回某些线程。那么,高优先级线程就可能接收到两个,或多个,或一百个连续的“时间片”,而不只是原来的一个。这里的一个(非常弱的)“实时”变量最多可能返回散落在线程列表中各处的重要线程的多个副本。这将增加服务于高优先级线程的实际频率,而不只是它们受到的所有关注。

在纯 Python 中使用更复杂的线程优先级方法可能不是很容易(不过它是使用某种第三方特定于 OS/处理器的库来实现的)。调度程序不是只给高优先级线程一个时间片的整型数,它还可以测量每个轻便线程中实际花费的时间,然后动态调整线程调度,使其对等待处理的线程更加“公平”(也许公平性和线程优先级是相关的)。不幸的是,Python 的 time.clock() 和它的系列都不是精度足够高的计时器,不足以使这种方式有效。另一方面,没有什么可以阻止“多时间片”方法中处理不足的线程去动态提高它自己的优先级。

将微线程和协作程序结合在一起

为了创建一个轻便线程(微线程)调度程序,我删除了协作程序逻辑“please branch to here”。这样做其实并不必要。示例中的轻便线程生成的通常都是 None ,而不是跳转目标。我们完全可以把这两个概念结合在一起:如果协同程序/线程生成了跳转目标,调度程序就可以跳转到被请求的地方(也许,除非被线程优先级覆盖)。然而,如果协同程序/线程只生成 None ,调度程序就可以自己决定下一步要关注哪个适当的线程。决定(以及编写)一个任意的跳转究竟会如何与线性线程队列交互将涉及到不少工作,不过这些工作中没有什么特别神秘的地方。

快速而廉价 — 为什么不喜欢它呢?

微线程模式(或者“轻便线程”)基本上可以归结为 Python 中流控制的另一种奇怪的风格。本专栏的前面几个部分已经谈到了另外几种风格。有各种控制机制的引人之处在于,它让开发者将代码功能性隔离在其逻辑组件内,并最大化代码的上下文相关性。

其实,要实现做任何可能做到的事的 可能性并不复杂(只要用一个“loop”和一个“if”就可以了)。对于轻易地分解为很多细小的“代理”、“服务器”或“进程”的一类问题来说,轻便线程可能是表达应用程序的底层“业务逻辑”的最清楚的模型。当然,轻便线程与一些大家更熟知的流机制相比速度可能非常快,就这点而言并无大碍。

上一页  3 4 5 6 7 8 

Tags:可爱 Python Python

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接