【问题标题】:Send large number of messages in python twisted在python中发送大量消息twisted
【发布时间】:2014-02-21 21:31:23
【问题描述】:

我有一个扭曲的 TCPServer,它有大量的客户端连接。我需要能够让一个主客户端向该服务器发出命令,以非阻塞方式向所有其他客户端连接发送消息。换句话说,服务器应该有一个命令处理程序(建立在 lineReceived 之上),它从主客户端接收一个特殊命令,然后启动一个线程或进程来循环所有其他客户端并向每个客户端发送一个命令(sendLine)这些客户中。主客户端的命令处理程序应在启动线程后立即返回。问题是在twisted 中对sendLine 的任何调用都必须从主reactor 线程中调用,因此必须使用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)

显然这只是伪代码,但这样的东西会起作用吗?

【问题讨论】:

    标签: python multithreading twisted


    【解决方案1】:

    呃,LineReceiver.sendLine() 已经是非阻塞的了;您不需要任何线程,只需执行以下操作:

    def handle_master_command(self, command):
        for client in other_clients:
            send_stuff_to_client(client, stuff_to_send)
    

    如果任何扭曲的 api 说它“必须从反应器线程调用”,那总是意味着它是非阻塞的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 2011-07-05
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多