gpt4 book ai didi

python - 使用 asyncio 有两个无限任务

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

我是Python新手,我必须创建一个程序来保持网络套接字和管道的连接,所以我需要两个异步函数。这些函数中的每一个都调用不同线程中的其他方法来详细说明接收到的 json 的内容。即我在套接字线程上收到一条消息,我收到该消息并抛出一个新线程来详细说明该消息。
这是实际的代码:

import asyncio
import sys
import json
import websockets

# Keep listening from web socket and pipe


async def socket_receiver():
"""Listening from web socket"""
file_socket = open(r"SocketReceived.txt", "w")
header = {"Authorization": r"Basic XXXXXXXXXXXXXX="}
async with websockets.connect(
'wss://XXXXXXXXX', extra_headers=header) as web_socket:
print("SOCKET receiving:")
greeting = await web_socket.recv()
json_message = json.loads(greeting)
file_socket.write(json_message)
print(json_message)

file_socket.close()

async def pipe_receiver():
"""Listening from pipe"""
file_pipe = open(r"ipeReceived.txt", "w")
while True:
print("PIPE receiving:")
line = sys.stdin.readline()
if not line:
break

jsonObj = json.loads(line);
file_pipe.write(jsonObj['prova'] + '\n')
# jsonValue = json.dump(str(line), file);
sys.stdout.flush()

file_pipe.close()
asyncio.get_event_loop().run_until_complete(socket_receiver())
asyncio.get_event_loop().run_until_complete(pipe_receiver())

run_until_complete 方法在我的情况下永远保留(它等待函数结束),因此只有套接字启动。我怎样才能同时启动两者?谢谢

最佳答案

asyncio.gather 可以解决这个问题,唯一的一点是两个函数应该共享相同的事件循环,并且两个函数都应该完全异步。

asyncio.get_event_loop().run_until_complete(
asyncio.gather( socket_receiver(),pipe_receiver()))

通过快速阅读pipe_receiver,您将在sys.stdin.readline调用中挂起事件循环,请考虑使用aioconsole来异步处理输入。

关于python - 使用 asyncio 有两个无限任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52199619/

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