我不熟悉在python中使用asyncore。
在我目前的设置中,我在自己的线程上使用asyncore的循环。在那个帖子上,我之前创建了一个服务器套接字。
就像在示例中一样,我接受传入的连接并产生一个处理程序。但是,与示例不同,我的连接不是简单的查询:它们是与消息传递服务器的连接。
这意味着,当处理程序对象处于活动状态并等待更多数据(并且我们已达到静止状态)时,另一个线程可能会收到一个事件(如刚刚完成的进程)并希望发送一些数据那些插座。
但是,如果(在调用线程上)我执行“sent = self.send(data)”,则变量“sent”最终为None ...即使套接字仍处于活动状态且一切都没有。
为了更清楚,当我调用send时,这里是每个线程的堆栈跟踪的良好表示:
Thread N:
myThreadMain
asyncore.loop()
Thread M:
.....
processDidExit
Messaging.sendMessage
ConnectionHandler.handleMessage
self.dispatcher_with_send::send(msg)
(注意我在那里使用C ++表示法只是为了表明ConnectionHandler.handleMessage正在调用它的超类的send方法。)
就像我说的那样,send方法返回None,'writable'从不被调用,也不是'handle_write'。我不确定我做错了什么......非常感谢任何帮助!