oslo.messaging消息接收机制

openstack社区上看到一个bug,和我目前遇到的问题一样:
https://review.openstack.org/...
但是文中的解释有些不理解:

  1. threading 和 eventlet executor是什么,为什么会有这两种机制
  2. 下面这两句话不太理解(不是英文不理解),希望高手能解答一下,不胜感激!
    With eventlet, we don't really share the socket between threads.
    But with threading executor and expecialy ssl, this can't work, if you
    write data with two different threads to the socket.
阅读 2.6k
1 个回答
  1. threading和eventlet executor是两种不同的异步执行机制。threading是通过python的并发库concurrent.futures模块实现的。任务生产者负责产生任务,并把任务加入到线程池,适当的时候这些任务会执行,但是执行顺序并不一定会按照加入线程池的顺序进行。 eventlet 是python的网络库,通过协程的方式实现并发。
  2. 第一句话:一个协程拥有自己私有的stack和局部变量,但也和其他协程有共有的全局变量,但是在不同的协程之间并没有公用socket。 第二句话:线程池中是不同的线程,如果使用不同的线程去向同一个socket写数据的话,ssl安全检查会有问题。

总结问题:我对这个问题的理解是:使用eventlet机制是没有问题的,这个问题是由于使用了threading造成的。多个线程使用同一个socket去处理消息会造成混乱,就像多个线程同时打印信息到屏幕上在一行里就会出现信息错乱的情况一样。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题