这是我要实现的目标:
函数很长,因此每个对象都在单独的文件中。这是我对象的基本结构:
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()