一个异步程序来管理许多其他程序

2024-09-25 18:16:46 发布

您现在位置:Python中文网/ 问答频道 /正文

最近我一直在试验使用asyncio的discord bots。我一直在制作一个程序来控制许多其他的机器人程序,在运行中打开和关闭它们,但是我有一个问题,我已经尝试过了子流程.Popen,rpyc和多处理,但我正在努力解决如何在程序之间进行通信。我尝试使用以下代码行启动子进程:

Popen('python smallprogram.py', stdout=PIPE, stdin=PIPE)

但是我仍然无法从主程序与较小的程序通信,因为较小的程序需要运行异步。这会阻止我将input()与大众传播(). 理想情况下,我希望有一种方法在需要时调用较小程序上的函数,而小程序仍在运行asyncio。我不介意将相同的代码块粘贴到每个较小的程序中,但我认为这也可以通过一些导入来解决?在

这能做到吗?我以前从未制作过API,但似乎我需要使用API作为模板。谢谢:)

注意:我只需要进行大而小的交流,但反过来也不错。在


Tags: 代码py程序apiasyncio进程stdout机器人
1条回答
网友
1楼 · 发布于 2024-09-25 18:16:46

many ways来处理进程间通信,我认为使用stdin/stdout是一种有效的方法。在

事实证明,在asyncio中从stdin异步读取是可能的,尽管quite tricky to do只使用标准库。在

或者,您可以使用aioconsole助手ainput

import aioconsole

async def echo_child():
    data = await aioconsole.ainput()
    print(data, end='')

get_standard_streams对于与stream API相似的接口:

^{pr2}$

在母公司方面:

import asyncio

async def parent():
    proc = await asyncio.create_subprocess_exec(
        sys.executable, 'child.py',
        stdin=asyncio.subprocess.PIPE,
        stdout=asyncio.subprocess.PIPE)
    proc.stdin.write(b'Hello\n')
    data = await proc.stdout.readline()
    print(data.decode().strip())
    proc.terminate()

相关问题 更多 >