【脚本语言系列】关于Python多线程编程StacklessPython,你需要知道的事

如何使用Stackless Python

安装stackless

下载地址

https://bitbucket.org/stackless-dev/stackless/wiki/Download
这里写图片描述

使用stackless

对象细节

  • tasklet对象(完成对象的创建)
import stackless
def show():
    print "Stackless Python"
st = stackless.tasklet(show)()
st.run()
st = stackless.tasklet(show)()
print st.alive
st.kill()
print st.alive
print stackless.tasklet(show)()
print stackless.tasklet(show)()
stackless.run()

这里写图片描述
这里写图片描述
- schedule对象(控制执行的顺序)

import stackless
def show():
    stackless.schedule()
    print 1
    stackless.schedule()
    print 2
print stackless.tasklet(show)()
print stackless.tasklet(show)()
stackless.run()

这里写图片描述
这里写图片描述
- channel对象(线程间通讯)

import stackless
def send():
    chn.send("Stackless Python")
    print "I send: Stackless Python"
def rec():
    print "I receive:", chn.receive()
chn = stackless.channel()    
print stackless.tasklet(send)()
print stackless.tasklet(rec)()
stackless.run()

这里写图片描述
这里写图片描述

综合应用

# -*- coding: utf-8 -*-
#
import stackless
import Queue
def Producer(i):
    global queue
    queue.put(i)
    print "Producer", i, "produces", i
def Consumer():
    global queue
    i = queue.get()
    print "Consumer", i, 'comsumes', i
queue = Queue.Queue()
for i in range(10):
    stackless.tasklet(Producer)(i)
for i in range(10):
    stackless.tasklet(Consumer)()
stackless.run()

这里写图片描述
这里写图片描述

什么是Stackless Python

Stackless Python是Python的一个增强版本,提供了对微线程的支持。微线程是轻量级的线程,微线程在多个线程之间切换所需的时间少,占用资源也更少。

Python 的并发编程技术 目录 • 1 介绍 o 1.1 为什么要用stackless  1.1.1 现实世界就是并发的  1.1.2 并发可能是(仅仅可能是)下一个重要的编程范式 o 1.2 安装Stackless • 2 Stackless起步 o 2.1 微进程(tasklet) o 2.2 调度器(scheduler) o 2.3 通道(channel) o 2.4 总结 • 3 协程(coroutine) o 3.1 子例程的问题  3.1.1 堆栈  3.1.2 那为什么要使用堆栈? o 3.2 走进协程 o 3.3 总结 • 4 轻量级线程 o 4.1 Hackysack的模拟 o 4.2 游戏的传统线程版本 o 4.3 Stackless o 4.4 总结 • 5 数据流 o 5.1 工厂 o 5.2 “普通”版本  5.2.1 分析 o 5.3 走进数据流 o 5.4 代码的stackless版本  5.4.1 分析  5.4.1.1 休眠功能  5.4.1.2 类 o 5.5 那我们获得了什么? o 5.6 “推”数据  5.6.1 半加器 • 6 角色 o 6.1 杀手机器人!  6.1.1 角色基类  6.1.2 消息的格式  6.1.3 “世界”类  6.1.4 一个简单的机器人  6.1.5 蹊径:pyGame  6.1.6 第一轮代码 o 6.2 又一蹊径: 机理的模拟  6.2.1 角色属性  6.2.2 碰撞检测  6.2.3 恒定的时间  6.2.4 伤害值、生命值和死亡  6.2.5 第二轮代码 o 6.3 回到角色: 让我们变得疯狂  6.3.1 爆炸  6.3.2 埋雷机器人  6.3.3 建造台  6.3.4 最终的模拟 o 6.4 总结 • 7 完整代码列表 o 7.1 pingpong.py - 递归的ping pong示例 o 7.2 pingpong_stackless.py - stackless的ping pong示例 o 7.3 hackysackthreaded.py - 基于操作系统线程的hackysack示例 o 7.4 hackysackstackless.py - stackless的hackysack示例 o 7.5 assemblyline.py - “普通”的生产线示例 o 7.6 assemblyline-stackless.py - stackless的生产线示例 o 7.7 digitalCircuit.py - stackless数字电路 o 7.8 actors.py - 第一个角色示例 o 7.9 actors2.py - 第二个角色示例 o 7.10 actors3.py - 第三个角色示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值