我有一个扭曲的TCPServer,它有大量的客户端连接。我需要能够让一个主客户端向该服务器发出命令,以便以非阻塞的方式向所有其他客户端连接发送消息。换句话说,服务器应该有一个命令处理程序(构建在lineReceived之上),它从主客户端接收一个特殊命令,然后启动一个线程或进程来遍历所有其他客户端,并向每个客户端发送一个命令(sendLine)。主客户端的命令处理程序应该在启动线程后立即返回。问题是,在twisted中对sendLine的任何调用都必须从主反应器线程调用,因此必须使用callFromThread来完成。那么,我的主命令处理程序是否可以执行以下操作:
def handle_master_command(self,command):
deferred=reactor.deferToThread(myfunc)
return
def myfunc(self):
for client in other_clients:
reactor.callFromThread(send_stuff_to_client,client,stuff_to_send)
显然这只是伪代码,但是像这样的东西能工作吗?
发布于 2014-02-21 23:13:06
呃,LineReceiver.sendLine()
已经是非阻塞的了;你不需要任何线程,只需这样做:
def handle_master_command(self, command):
for client in other_clients:
send_stuff_to_client(client, stuff_to_send)
如果任何扭曲的api说它“必须从反应器线程调用”,这总是意味着它将是非阻塞的。
https://stackoverflow.com/questions/21945586
复制相似问题