async def startAsyncTcpClient(): global reader global writer reader, writer = await asyncTcpClientConnect() def runTcpClient(): loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.run_until_complete(startAsyncTcpClient())为什么会形成两个client
时间: 2023-07-15 07:12:51 浏览: 173
这段代码可能会形成两个client的原因是因为它使用了两个不同的方式来运行asyncio事件循环。
首先,它定义了一个名为`startAsyncTcpClient()`的异步函数,该函数使用`asyncTcpClientConnect()`函数返回的reader和writer对象来初始化TCP客户端。然后,它使用`asyncio.new_event_loop()`函数创建了一个新的事件循环,并将其作为当前事件循环设置为默认值。接着,它使用`loop.run_until_complete()`函数运行`startAsyncTcpClient()`函数,直到它完成。
接下来,它定义了一个名为`runTcpClient()`的函数,该函数也使用`asyncio.new_event_loop()`函数创建了一个新的事件循环,并将其设置为当前事件循环。然后,它使用`loop.run_until_complete()`函数再次运行`startAsyncTcpClient()`函数,直到它完成。
因此,这段代码会形成两个client,因为它实际上创建了两个不同的事件循环,并在每个事件循环中运行`startAsyncTcpClient()`函数。如果希望只创建一个TCP客户端,请将`runTcpClient()`函数删除,并仅使用`startAsyncTcpClient()`函数来初始化TCP客户端。
相关问题
async def asyncSendData(msg: str, length=1024*10): global _state, _recon, writer, reader if not _state: try: reader, writer = await asyncio.open_connection() _state = True logger.info("Connect the Server Success!") except Exception as eMsg: logger.error("Connect the Server Failed. See {}!".format(eMsg)) async def sendData(msg: str, length): pass await sendData(msg, length) 我该怎么正确的在其他的脚本调用这个asyncSendData函数而不被报错 got Future <Future pending> attached to a different loop.
这个错误通常是由于在不同的事件循环(loop)中调用异步函数而导致的。你可以尝试在调用 `asyncSendData` 函数的脚本中,先创建一个新的事件循环(loop),然后将其设置为当前事件循环(loop),再调用 `asyncSendData` 函数。
具体实现如下:
```
import asyncio
async def call_asyncSendData(msg: str, length=1024*10):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
await asyncSendData(msg, length)
loop.close()
```
然后在其他脚本中,调用 `call_asyncSendData` 函数即可,这样就不会出现上述错误了。
阅读全文