带有asyncio和rxpy的无限循环

时间:2019-05-28 17:05:06

标签: python python-3.x python-asyncio rx-py

这是我要实现的目标:

  1. 创建2个返回异步消息的独立对象
  2. 以“可观察的”方式转换消息

函数很长,因此每个对象都在单独的文件中。这是我对象的基本结构:

class Object:
    def message(self, observer, scheduler):
        _task = None

        def _teardown():
            if _task:
                _task.cancel()
            observer.on_completed()

        async def _loop():
            while True:
                #DO STUFF
                observer.on_next(message)

        async def _run_loop():
            try:
                await _loop()
            except asyncio.CancelledError:
                print('error')
            finally:
                _teardown()

        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        _task = loop.create_task(_run_loop())
        loop.run_forever()

这是RXPY的代码:

object1 = Object1()

object1_observable = defer(lambda _: create(object1.message)).pipe(
    op.observe_on(EventLoopScheduler()),
    op.share()
)

object1_observable.subscribe(lambda value: print('Object1 Observer Received'))

object2 = Object2()

object2_observable = defer(lambda _: create(object2.message)).pipe(
    op.observe_on(EventLoopScheduler()),
    op.share()
)

object2_observable.subscribe(lambda value: print('Object2 Observer Received'))

问题1:使用此代码,我仅从object1接收消息。我应该如何修改此代码以使其起作用并从两个对象接收消息?

问题2:我希望来自object1的消息成为另一个类的参数,比如说Object3。然后,对象3将侦听对象2。对于来自Object2的每条消息,Object3都会做某事。对于来自Object1的每条消息,Object3属性都会改变。但是,在Object3完成来自Object2的最新消息后,属性才应更改。我不知道如何使用RXPY做到这一点。有想法吗?

更新 使用脚踏板,代码可以正常工作。我不确定这是否是继续进行的好方法。 我将通过适当的查杀程序对其进行更新,但我仍然会继续处理问题2

class Object:
    def message(self, observer, scheduler):
        def _loop():
            while True:
                #DO STUFF
                observer.on_next(message)

        thread = threading.Thread(target=_loop)
        thread.daemon = False
        thread.start()

0 个答案:

没有答案