首页 > 解决方案 > 如何从由不同线程调用的回调中调用异步函数?

问题描述

我面临的问题是 ROS 框架使用普通回调,而 aiohttp+socket.io 使用 asyncio。我希望从 ROS 回调中调用异步函数。例子:

#!/usr/bin/env python3

import asyncio
import socketio
import rospy
from aiohttp import web
from rosgraph_msgs.msg import Log

sio = socketio.AsyncServer()
app = web.Application()
sio.attach(app)

def on_rosout(msg):
  sio.emit("message", msg.msg) # THIS DOES NOT WORK

@sio.on('connect', namespace='/')
def connect(sid, environ):
    print("connect", sid)

@sio.on('disconnect', namespace='/')
def disconnect(sid):
    print("disconnect", sid)

app.router.add_static('/', 'html', show_index = True)

if __name__ == "__main__":
    rospy.init_node("foo_node")
    rospy.Subscriber("/rosout_agg", Log, on_rosout)
    web.run_app(app)

标签: pythonpython-3.xasynchronousrosrobotics

解决方案


推荐阅读