2007年06月20日 星期三 18:34
建立一个全局字典,每次创建一个线程的时候,把线程实例保存到字典中去。 from SocketServer import ThreadingTCPServer, StreamRequestHandler lkpool={} class StreamHandler(StreamRequestHandler): def send(self,text): def handle(self): self.semawrite=threading.BoundedSemaphore(1) lkpool[self.client_address]=self def finish(self): del lkpool[self.client_address] 调用的时候可以这样,任何地方都可以调用。 lkpool[address].send(something) On 6/18/07, 秦川 <anewrer at gmail.com> wrote: > 是这样的,我在尝试用python些一个C/S的程序,目的是通过TCP连接实现局域网内 聊天的简单通信。 > 我的做法是,当客户端程序连接过来的时候,新建一个线程,开启新的TCP连接,然 后发送和接收都由这个线程来进行。我遇到的问题是,如果一个连接要向另一个连接发 送信息(即通过服务器中转一下),他就需要执行别的线程里面的发消息方法。 > > 我不知道有什么办法可以直接调用。我用的蠢办法是在建立线程的时候把一个函数传 递到__init__中去,然后当收到信息的时候调用该函数(有点像C#的委托啊), > 这个函数中使用threading.enumerate()获得活着的线程,然后调用线程里面的方法 来实现。 > 我不知道这个方法是不是合适的,也不清楚标准的做法是怎么样的。希望有经验的 前辈帮帮忙。谢谢。 >
2007年06月20日 星期三 22:42
恩,这样确实很方便,limodou也是这么说的. 想不到在python中线程也可以简单的看作一个对象,写起来真是舒服. 在07-6-20,djf <singlerdjf在gmail.com> 写道: > > 建立一个全局字典,每次创建一个线程的时候,把线程实例保存到字典中去。 > > from SocketServer import ThreadingTCPServer, StreamRequestHandler > lkpool={} > class StreamHandler(StreamRequestHandler): > def send(self,text): > > def handle(self): > self.semawrite=threading.BoundedSemaphore(1) > lkpool[self.client_address]=self > > def finish(self): > del lkpool[self.client_address] > > 调用的时候可以这样,任何地方都可以调用。 > lkpool[address].send(something) > -------------- 下一部分 -------------- 一个HTML附件被移除... URL: http://python.cn/pipermail/python-chinese/attachments/20070620/3900ba33/attachment.htm
Zeuux © 2025
京ICP备05028076号