2.1.2 Python实现

1.发布方实现

demo_py 目录下新建 Python 文件 demo01_talker_py.py,输入如下内容:

#!/usr/bin/env python3

'''  
    需求:实现消息发布方,发布数据

    实现:
        1.导包;
        2.初始化cyber框架;
        3.创建节点;
        4.创建发布方;
        5.组织并发送数据;
        6.等待关闭。

'''
from cyber.python.cyber_py3 import cyber
from cyber.demo_base_proto.student_pb2 import Student
import time
def talk():
    # 3.创建节点;
    talker_node = cyber.Node("ergou_py")
    # 4.创建发布方;
    talker = talker_node.create_writer("chatter",Student)
    # 5.组织并发送数据;
    seq = 0
    while not cyber.is_shutdown():
        seq += 1
        print("send message %d" % seq)
        stu = Student()
        stu.name = "huluwa"
        stu.age = seq
        stu.height = 1.78
        stu.books.append("yuwen")
        stu.books.append("shuxue")
        stu.books.append("yingyu")


        talker.write(stu)
        time.sleep(1.0)

if __name__ == "__main__":
    cyber.init()
    #主逻辑封装进函数
    talk()
    cyber.shutdown()

BUILD文件:

py_binary(
    name = "demo01_talker_py",
    srcs = ["demo01_talker_py.py"],
    deps = [
        "//cyber/python/cyber_py3:cyber",
        "//cyber/demo_base_proto:student_py"
    ] 

)

2.订阅方实现

demo_py 目录下新建 Python 文件 demo02_listener_py.py,输入如下内容:

#!/usr/bin/env python3
'''  
    需求:订阅数据
    实现:
        1.导包;
        2.初始化 cyber 框架;
        3.创建订阅节点;
        4.创建订阅方;
        5.处理数据;
        6.等待关闭。

'''
from cyber.python.cyber_py3 import cyber
from cyber.demo_base_proto.student_pb2 import Student

def cb(stu):
    # print(stu)
    print("name = %s age = %d height = %.2f" % (stu.name, stu.age, stu.height))
    for book in stu.books:
        print("book: %s" %book)
    print("-" * 80)

def listen():
    listener_node = cyber.Node("cuihua_py")
    listener = listener_node.create_reader("chatter",Student,cb)
    listener_node.spin()

if __name__ == "__main__":
    cyber.init()
    listen()
    cyber.shutdown()

BUILD文件:

py_binary(
    name = "demo02_listener_py",
    srcs = ["demo02_listener_py.py"],
    deps = [
        "//cyber/python/cyber_py3:cyber",
        "//cyber/demo_base_proto:student_py"
    ] 

)

3.编译执行

编译:

bazel build cyber/demo_py/...

执行(需要两个终端):

终端A执行发布方:

source cyber/setup.bash
./bazel-bin/cyber/demo_py/demo01_talker_py

终端B执行订阅方:

source cyber/setup.bash
./bazel-bin/cyber/demo_py/demo02_listener_py

最终运行结果与本章引言部分的案例1类似。

results matching ""

    No results matching ""