gpt4 book ai didi

python - 如何使用 urwid 和 asyncio 创建异步程序?

转载 作者:行者123 更新时间:2023-12-01 00:46:07 25 4
gpt4 key购买 nike

我想用 aiortc 建立一个聊天室。首先,我想用 urwid 作为 cli 和 asyncio 构建一个模型。urwid 部分已经运行良好,可以进行用户输入。我知道想要运行一个协程来生成随机文本并作为聊天客户端在该聊天室中发短信。

我尝试使用主循环作为异步协程运行我的 urwid 函数,但没有成功。我不知道如何将异步函数集成到我的 urwid 主循环中。

def unhandled(key):
"""
functin to handle input
"""
global TEXT_INPUT
global lw_user_input
global lw_chatroom
global listbox_chatroom

if not isinstance(key, tuple):
if key == 'enter':
del lw_user_input[-1]
# create widegt and fill with user input
lw_chatroom.append(widget)
TEXT_INPUT = ""
listbox_chatroom.set_focus(len(lw_chatroom)-1, 'above')

elif key == 'esc':
raise urwid.ExitMainLoop()
elif key == 'backspace':
if len(lw_user_input) > 0:
user_input = lw_user_input[0].get_text()[0]
user_input = user_input[:-1]
del lw_user_input[-1]
TEXT_INPUT = user_input
lw_user_input.append(urwid.Text(TEXT_INPUT))
else:
TEXT_INPUT += key # repr(key)
if len(lw_user_input) > 0:
del lw_user_input[-1]
lw_user_input.append(urwid.Text(TEXT_INPUT))
else:
lw_user_input.append(urwid.Text(key))



def generate_output():
global lw_chatroom
global listbox_chatroom
while True:
# generate text and widgets and post with delay
lw_chatroom.append(chat_widget)
listbox_chatroom.set_focus(len(lw_chatroom)-1, 'above')


def create_cli():
# generate all widgets
uloop = urwid.MainLoop(frame, palette, screen,
unhandled_input=unhandled)
uloop.start()


if __name__ == '__main__':
create_cli()

我想异步运行generate_output()和unhandled(key)。我不知道该怎么做。

最佳答案

好吧,我明白了。

就这么简单:

aloop = asyncio.get_event_loop()

ev_loop = urwid.AsyncioEventLoop(loop=aloop)
loop = urwid.MainLoop(frame, palette, screen,
unhandled_input=unhandled, event_loop=ev_loop)
aloop.create_task(generate_output())
loop.run()

关于python - 如何使用 urwid 和 asyncio 创建异步程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56966547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com