如何 运行 Python3 中的并行语句
How to run the Statements in Parallel in Python3
s_t = obj.sock_recv(4096).decode('ascii')
print(s_t)
inp = input("Client reply!")
obj.sock_send(str.encode(inp))
谁能指导我如何并行 运行 这些语句,这意味着如果 s_t 没有收到任何东西,那么程序不会卡住,但仍然会执行进一步的语句。
我会添加这个,因为它包含了一些问题,当你有一个循环并且已经 运行 时。它之前把我绊倒了,所以不妨让你头疼一下。
import asyncio
async def getData1():
s_t = obj.sock_recv(4096).decode('ascii')
return
async def getInp1():
inp = input("Client reply!")
obj.sock_send(str.encode(inp))
return
async def main():
res = await(asyncio.gather(getData1(), getInp1())
if __name__ == "__main__":
try:
loop = asyncio.get_running_loop()
except RuntimeError:
loop = None
if loop and loop.is_running():
print('Async event loop already running')
res1 = loop.create_task(main())
else:
print('Starting new event loop')
res1 = asyncio.run(main())
如果您的目标是使 'recv' 成为非阻塞的,即 'recv' 将在没有数据时立即 return,
然后你可以这样修改你的代码:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setblocking(0) # Add this line to socket object
和
obj, addr = s.accept()
obj.setblocking(0)
如果您正在寻找异步服务器,那么我相信 asyncio 是正确的选择。
s_t = obj.sock_recv(4096).decode('ascii')
print(s_t)
inp = input("Client reply!")
obj.sock_send(str.encode(inp))
谁能指导我如何并行 运行 这些语句,这意味着如果 s_t 没有收到任何东西,那么程序不会卡住,但仍然会执行进一步的语句。
我会添加这个,因为它包含了一些问题,当你有一个循环并且已经 运行 时。它之前把我绊倒了,所以不妨让你头疼一下。
import asyncio
async def getData1():
s_t = obj.sock_recv(4096).decode('ascii')
return
async def getInp1():
inp = input("Client reply!")
obj.sock_send(str.encode(inp))
return
async def main():
res = await(asyncio.gather(getData1(), getInp1())
if __name__ == "__main__":
try:
loop = asyncio.get_running_loop()
except RuntimeError:
loop = None
if loop and loop.is_running():
print('Async event loop already running')
res1 = loop.create_task(main())
else:
print('Starting new event loop')
res1 = asyncio.run(main())
如果您的目标是使 'recv' 成为非阻塞的,即 'recv' 将在没有数据时立即 return,
然后你可以这样修改你的代码:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setblocking(0) # Add this line to socket object
和
obj, addr = s.accept()
obj.setblocking(0)
如果您正在寻找异步服务器,那么我相信 asyncio 是正确的选择。