Skip to main content

Python 入门基础知识 - 微线程 - Stackless Python

Python 入门基础知识 - 微线程 - Stackless Python

微线程 - Stackless Python

Stackless Python是Python的一个增强版本。Stackless Python修改了Python的代码,提供了对微线程的支持。

微线程是轻量级的线程,与前边所讲的线程相比,微线程在多个线程间切换所需的时间更多,占用资源也更少。

Stackless Python概述

Stackless Python不是必需的,它只是Python的一个修改版本,对多线程编程更友好的支持。如果在对线程应用有较高的的要求时

可以考虑使用Stackless Python来完成。

1.Stackless Python 安装

在安装Stackless Python之前应该先安装Python,根据所安装的Python版本到Stackless Python的官网

http://stackless.com下载相应的版本。

安装完后可以在Python的交换式环境中输入如下代码

import stackless

如果没有错误产生,则表示Stackless Python已经安装好了。若出现错误,则可能是Stackless Python与当前的Python版本不兼容,

可以考虑使用其他版本的Python

2. stackless模块中的tasklet对象

Stackless Python提供了stackless内置模块。stackless模块中的tasklet对象完成了与创建线程类似的功能。

使用tasklet对象可以像创建线程运行函数那样来运行函数。

示例代码如下

# _*_ coding: utf-8 _*_
import stackless
def show():
    print('Stackless Python')
st = stackless.tasklet(show)() # 调用tasklet添加函数,第2个括号为函数参数
st.run() # 调用run方法,执行函数
st = stackless.tasklet(show)() # 重新生成st
print(st.alive) # 查看其状态
st.kill() # 调用kill方法结束线程
print(st.alive) # 查看其状态
print(stackless.tasklet(show)()) # 直接调用tasklet
print(stackless.tasklet(show)())
stackless.run() # 调用run方法

运行后输出结果如下

Stackless Python
True
False
<_stackless.tasklet object at 0x1007e76e0>
<_stackless.tasklet object at 0x1007e7b40>
Stackless Python
Stackless Python

3.stackless模块中的schedule对象

stackless模块中的schedule对象可以控制任务的执行顺序。当有多个任务时,可以使用schedule对象使其依次执行。

示例代码如下

# _*_ coding: utf-8 _*_
import stackless
def show():
    stackless.schedule()
    print(1)
    stackless.schedule()
    print(2)
stackless.tasklet(show)()  # 调用tasklet,生成任务列表
stackless.tasklet(show)()
stackless.run()  # 执行任务

运行后输出结果如下

1
1
2
2

4.stackless模块中的channel对象

使用stackless模块中的channel对象可以在不同的人之间进行通信,这和线程间的通信类似。使用channel对象的

send方法可以发送数据。使用channel对象的receive方法可以接收数据。

# _*_ coding: utf-8 _*_
import stackless
def send():
    chn.send('Stackless Python')
    print('I send: Stackless Python')
def rec():
    print('I receive: %s ' % chn.receive())
chn = stackless.channel()
stackless.tasklet(send)()
stackless.tasklet(rec)()
stackless.run()

运行结果如下

I receive: Stackless Python
I send: Stackless Python

实例环境声明

# _*_ coding: utf-8 _*_
# Python 2.7.13
版权声明

版权声明

durban.zhang 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(http://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:http://www.walkerfree.com/article/80