gpt4 book ai didi

python 在后台触发并忘记异步函数

转载 作者:行者123 更新时间:2023-12-05 05:45:48 26 4
gpt4 key购买 nike

我正在尝试以非阻塞方式执行异步无限循环函数。目前我有以下代码:

class OpcuaClient():
def __init__(self):
...
#subscribe to changes
loop = asyncio.get_event_loop()
loop.create_task(self.subscribe_to_node(self.type_Nid))
loop.create_task(self.subscribe_to_node(self.housingSerial_Nid))
loop.run_forever()

print("subprocesses started")

async def subscribe_to_node(self, nodeid):
async with Client(url=self.url) as client:
node = client.get_node(nodeid)
# subscribing to node
sub = await client.create_subscription(500, self.handler)
await sub.subscribe_data_change(node)
# subscribe for infinte time
while True:
await asyncio.sleep(1)

但是 loop.run_forever() 会阻止执行并且“子进程已启动”永远不会被打印出来。请注意,我想在同步构造函数中启动后台进程。我怎样才能做到这一点?我还尝试了一些多处理/线程的东西,但也失败了。

最佳答案

一旦你开始事件循环,例如使用 loop_forever,它接管了控制权。 “永远”意味着直到没有明确停止。循环关闭后将到达以下打印消息的语句,但随后所有异步操作也会停止。

如果您需要将“后台”服务作为任务运行,您也需要将“前台”代码转换为异步任务,或者使用您在问题中提到的多线程或多处理,但不知道预期的详细信息与后台任务的沟通很难做出任何建议。

关于python 在后台触发并忘记异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71293139/

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