免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7899 | 回复: 13
打印 上一主题 下一主题

求助:两个无限循环线程切换的问题~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-05 22:52 |只看该作者 |倒序浏览
5可用积分
我用的是stackless模块

我有两个无限循环

一个线程是无限循环检测一个值的变化
另外一个是接受udp包

设置两个通道
one=stackless.channel()
two=stackless.channel()

def  check():
     two.recevie()
     while 1:
           if 检测值 a=1:
               dosomething
           else:
              one.send('开始收包')


def udp():
   
    one.receive()
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    s.bind((loaclhost_ip,port))
    while 1:
        d,a=s.recvfrom(1024)
         two.send('返回check')


开启线程

stackless.tasklet(check)()
stackless.tasklet(udp)()
stackless.tasklet(two.send)('开始检测')
stackless.run()



问题来了,如果我收不到数据,我永远无法跳回到check()检测值a了~

我要怎么做才能一边收包一边检测a的值呢??

论坛徽章:
0
2 [报告]
发表于 2009-05-06 08:46 |只看该作者
没用过stackless模块,但按线程的基本原理理解,udp()接收数据和check()是两个线程,它们是并行的,应该不会出现check()无法运行的情况。

PS: check()函数的变量a和udp()函数的变量a都是局部变量,作用范围只在本函数内,两个a是独立不相关的,尽管它们变量名一样。

论坛徽章:
0
3 [报告]
发表于 2009-05-06 12:09 |只看该作者
谢谢楼上的


现在问题是

我的线程
是这样的哦

如果udp收不到包
就永远无法去检测a的值了

ps:
这两个a其实没有什么关系的,是我顺手写成这样的~

[ 本帖最后由 zengleo 于 2009-5-7 01:23 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-05-07 01:24 |只看该作者
哪位大侠帮忙想想办法啊~~~

论坛徽章:
0
5 [报告]
发表于 2009-05-07 17:45 |只看该作者
recvfrom会造成系统阻塞,stackless在这种情况下是无能为力的~~~stackless终究只是甜点...  
要达到你这个目的还是回到传统进程 or 线程模型吧!

论坛徽章:
0
6 [报告]
发表于 2009-05-07 22:15 |只看该作者
能不能在socket上面做文章呢~
比如做成 非阻塞的~

论坛徽章:
0
7 [报告]
发表于 2009-05-07 23:06 |只看该作者
原帖由 knift 于 2009-5-7 17:45 发表
recvfrom会造成系统阻塞,stackless在这种情况下是无能为力的~~~stackless终究只是甜点...  
要达到你这个目的还是回到传统进程 or 线程模型吧!



传统的怎么实现???

论坛徽章:
0
8 [报告]
发表于 2009-05-08 12:42 |只看该作者

stackless微线程

看来楼上几位对stackless还不了解。stackless是微线程,并非真实的线程,而且线程间也不是并行执行的。
如果有心学习这个强大的微线程技术,可以svn下这些例子回来学习:
http://stacklessexamples.googlecode.com/svn/trunk
楼主的问题,在这些例子里面有解决办法。就是examples\networking\stacklesssocket.py。
这个单元是模拟普通的socket.py,用select异步模式代替阻塞模式。

论坛徽章:
0
9 [报告]
发表于 2009-05-09 17:54 |只看该作者
谢谢!!

论坛徽章:
0
10 [报告]
发表于 2009-05-13 23:22 |只看该作者
能不能再指点一下我啊!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP