Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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服务器_Python_Websocket_Python Asyncio - Fatal编程技术网

使用Python在循环内异步更新websocket服务器

使用Python在循环内异步更新websocket服务器,python,websocket,python-asyncio,Python,Websocket,Python Asyncio,我正在使用Python脚本从机器的PLC读取数据。脚本的核心是一个while循环,它每秒运行一次,读取机器发送的任何数据。我想做的是将数据保存在数据库中,同时使用WebSocket“发布”一些数据,以便在web应用程序上实时显示。数据库部分正在工作 对于我的另一个目标,我一直在阅读,我已经启动了一个非常简单的websocket服务器,就像这样 import asyncio import websockets async def create_socket(data): async d

我正在使用Python脚本从机器的PLC读取数据。脚本的核心是一个while循环,它每秒运行一次,读取机器发送的任何数据。我想做的是将数据保存在数据库中,同时使用WebSocket“发布”一些数据,以便在web应用程序上实时显示。数据库部分正在工作

对于我的另一个目标,我一直在阅读,我已经启动了一个非常简单的websocket服务器,就像这样

import asyncio
import websockets


async def create_socket(data):
    async def hello(websocket, path):
        await websocket.send(data)

    start_server = websockets.serve(hello, "localhost", 5678)

    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()
“数据”输入是一个json,我可以从我的JS脚本中毫无问题地读取它,但这当然会阻塞主队列,而且,由于我正在从提到的while循环调用上述代码,我无法通过第一次迭代。我想做的是继续执行while循环,并使用每次迭代时从plc读取的数据异步更新websocket

你有什么建议吗


谢谢

您能否使PLC代码异步并将其放入同一事件循环中?这就是asyncio的设计用途。感谢您的回复。我是否应该摆脱while循环并使用asyncio来实现这一点?如果可以的话,当然可以。但请注意,在asyncio中,任何阻塞调用都必须是异步的。因此,如果用于读取数据的调用可能会阻塞,则需要找到一个异步库来执行此操作。