经过一天的测试和思考。
终于搞明白了一点,
如果协程向自己发送消息
那么不但该协程会立即退出。
而且主进程也会退出。
原因估计是stackless python认为遇到了消息循环
该异常不可以被捕获。(但是发送失败的异常可以捕获)
以下为测试实例
#coding=gbk
#测试一下多个微线程的情况
import stackless
import sys
import time
count=0
#创建三个通道
ch1 = stackless.channel()
ch2 = stackless.channel()
#创建函数
def f1():
global count
while 1:
#while ch1.receive(): #blockhere
msg=ch1.receive() #blockhere
#print "recv 1"
print "1recv %s" % msg
if msg == 'exit':
print "1 quit"
time.sleep(1)
break
else:
try:
ch1.send("1")
except :
print "error"
ch2.send("2")
def f2():
while 1:
msg2=ch2.receive() #blockhere
print "2recv %s" % msg2
if msg2 == 'exit':
print "2 quit"
time.sleep(1)
break
else:
ch1.send("ok")
#创建微线程
stackless.tasklet(f1)()
stackless.tasklet(f2)()
#初始化方法1
#ch1.send('0')
#初始化3
#stackless.tasklet(ch1.send)('2')
#启动微线程
stackless.run()
#初始化2
ch1.send('1')