【问题标题】:DDS Openslice: How to create a listener in pythonDDS Openslice:如何在 python 中创建监听器
【发布时间】:2021-01-08 18:54:59
【问题描述】:

我正在使用凌华科技的 OpenSplice 和他们的 Python API。我似乎找不到好的文档或类参考。我想设置一种非阻塞方式来接收多条消息。他们的 Listener 似乎提供了这个,但不清楚如何在 python 中设置它。

他们的 DDS 教程给出了一个 C 示例:

class TempSensorListener :
   public dds::sub::NoOpDataReaderListener<tutorial::TempSensorType>
   {
      public:
      virtual void on_data_available(dds::sub::DataReader<tutorial::TempSensorType>& dr)
      {
         ...
      });
   }
};

TempSensorListener listener;
dr.listener(&listener, dds::core::status::StatusMask::data_available()); 

这似乎表明 datareceiver 有一个“listener”方法用于为 datareader 分配一个监听器。

这是如何使用 Python API 完成的?我似乎无法从 python datareceiver 中找到监听器方法。

提供的 Python 示例(example1.py 和 example2.py)提供

# Data available listener
class DataAvailableListener(Listener):
    def __init__(self):
        Listener.__init__(self)

    def on_data_available(self, entity):
        print('on_data_available called')
        l = entity.read(10)
        for (sd, si) in l:
            sd.print_vars()

但我没有看到类的实例化。该示例似乎使用了 Waitset 而根本不使用侦听器

我期待的是这样的:

listener = DataAvailableListener()
reader.listener(listener)

reader 确实有一个名为 listener 的属性。我将对象分配给该属性,但它似乎没有任何效果。

【问题讨论】:

    标签: python data-distribution-service opensplice


    【解决方案1】:

    我如何找到与 6.10.4 相同问题的解决方案:

    参考dds 包中的文档(包含在您的$OSPL_HOME/tools/python/docs/html/dds.html 中),您可以使用Subscriber 类的create_datareader 方法设置监听器:

    from dds import *
    from foo import foo_type # idlpp generated module/class
    
    # Data available listener
    class DataAvailableListener(Listener):
        def __init__(self):
            Listener.__init__(self)
    
        def on_data_available(self, entity):
            print('on_data_available called')
            l = entity.read(10)
            for (sd, si) in l:
                sd.print_vars()
    
    dp = DomainParticipant()
    topic = dp.create_topic('foo_topic',foo_type)
    sub = dp.create_subscriber()
    sub.create_datareader(topic,listener=DataAvailableListener())
    

    【讨论】:

    • 谢谢,我查看了 github 中的代码,发现了。我打算回帖,但我发现即使 C 实现工作正常,当我发送消息太快时它也会丢弃消息。
    猜你喜欢
    • 2022-12-05
    • 1970-01-01
    • 2014-10-03
    • 2012-02-03
    • 2011-10-19
    • 2011-10-19
    • 2013-06-27
    • 2016-02-12
    • 2020-12-30
    相关资源
    最近更新 更多