Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有比这更好的混合websocket recv和发送呼叫的方法?_Python_Websocket_Python Asyncio - Fatal编程技术网

Python 有没有比这更好的混合websocket recv和发送呼叫的方法?

Python 有没有比这更好的混合websocket recv和发送呼叫的方法?,python,websocket,python-asyncio,Python,Websocket,Python Asyncio,目前,我正在使用asyncio.wait_轮询websocket.recv,以便在需要时调用websocket.send: async def client_reader(): websocket=wait websockets.connect(f“ws://localhost:{PORT}”) 结果=“” 尽管如此: 尝试: #有没有更好的方法从websocket接收视频? result=result+wait asyncio.wait_for(websocket.recv(),timeout

目前,我正在使用
asyncio.wait_
轮询
websocket.recv
,以便在需要时调用
websocket.send

async def client_reader():
websocket=wait websockets.connect(f“ws://localhost:{PORT}”)
结果=“”
尽管如此:
尝试:
#有没有更好的方法从websocket接收视频?
result=result+wait asyncio.wait_for(websocket.recv(),timeout=1.0)
如果result.endswith('\n'):
result=result.rstrip()
打印(f“result={result}”)
结果=“”
#我需要在这里执行其他异步操作
等待其他工作
除asyncio.TimeoutError外:
通过
关于
asyncio
websockets
的所有文档,我只能找到使用过的玩具示例。有更好的方法吗

这是一个模拟我正在做的事情的独立程序:

导入异步IO
导入WebSocket
随机输入
导入多处理
导入时间
端口=49152
text=”“”\
这是一组文本,将用于
模拟服务器发送多行数据
以随机延迟量向客户端发送文本
在每行之间。
"""
def get_next_line():
text\u list=text.split('\n')
尽管如此:
对于文本列表中的行:
屈服线+'\n'
行\u生成器=获取下一行
异步def delay_服务器(websocket,路径):
尽管如此:
等待asyncio.sleep(random.random()*5.0)
行=下一行(行\u生成器)
等待websocket。发送(行)
def server_func():
尝试:
start_server=websockets.service(延迟_服务器,“本地主机”,端口)
asyncio.get_event_loop()。运行_直到完成(启动服务器)
asyncio.get_event_loop().永远运行_()
除键盘中断外:
通过
异步定义一些其他工作()
打印(“我偶尔需要在此处调用websocket.send())
异步def客户端_读取器():
websocket=wait websockets.connect(f“ws://localhost:{PORT}”)
结果=“”
尽管如此:
尝试:
result=result+wait asyncio.wait_for(websocket.recv(),timeout=1.0)
如果result.endswith('\n'):
result=result.rstrip()
打印(f“result={result}”)
结果=“”
等待其他工作
除asyncio.TimeoutError外:
通过
def client_func():
尝试:
asyncio.run(客户端\读卡器())
除键盘中断外:
通过
server\u proc=multiprocessing.Process(target=server\u func)
server_proc.daemon=True
服务器进程启动()
client\u proc=multiprocessing.Process(target=client\u func)
client_proc.daemon=True
客户端程序启动()
尝试:
尽管如此:
时间。睡眠(1.0)
除键盘中断外:
通过
服务器进程加入()
客户端进程连接()

我将代码更改为如下所示:

async def client_读取器(websocket,结果):
尝试:
result=result+wait asyncio.wait_for(websocket.recv(),timeout=1.0)
如果result.endswith('\n'):
result=result.rstrip()
打印(f“result={result}”)
结果=“”
除asyncio.TimeoutError外:
通过
返回结果
异步定义如果标志发送消息():
打印(“如果设置了标志,我将在此处调用websocket.send”)
异步def客户端写入程序(websocket):
等待if_flag_send_message()
等待异步睡眠(1.0)
异步def客户端处理程序():
websocket=wait websockets.connect(f“ws://localhost:{PORT}”)
结果=“”
尽管如此:
reader\u task=asyncio.create\u任务(客户端\u阅读器(websocket,结果))
writer\u task=asyncio.create\u任务(客户端\u编写器(websocket))
等待asyncio.gather(读卡器任务、写卡器任务)
结果=读卡器任务。结果()
我仍然不确定这是一种正确的做事方式,但它确实有效