我想使用asyncio协同程序而不是多线程来重新实现我的代码.
server.py
def handle_client(client):
request = None
while request != 'quit':
request = client.recv(255).decode('utf8')
response = cmd.run(request)
client.send(response.encode('utf8'))
client.close()
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 15555))
server.listen(8)
try:
while True:
client, _ = server.accept()
threading.Thread(target=handle_client, args=(client,)).start()
except KeyboardInterrupt:
server.close()
Run Code Online (Sandbox Code Playgroud)
client.py
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.connect(('localhost', 15555))
request = None
try:
while request != 'quit':
request = input('>> ')
if request:
server.send(request.encode('utf8'))
response = server.recv(255).decode('utf8')
print(response)
except KeyboardInterrupt:
server.close()
Run Code Online (Sandbox Code Playgroud)
我知道有一些适当的异步网络库可以做到这一点.但我只是想在这种情况下只使用asyncio核心库,以便更好地理解它.
在处理客户端定义之前只添加async关键字真是太好了......这里有一段似乎有效的代码,但我仍然对实现感到困惑.
asyncio_server.py
def handle_client(client):
request = None
while request != 'quit':
request …Run Code Online (Sandbox Code Playgroud) 我有以下型号。
class Car(models.Model):
owner = models.ForeignKey('Driver')
class Country(models.Model)
name = models.CharField(max_length=255)
class Driver(models.Model):
name = models.CharField(max_length=255)
age = models.IntegerField()
country = models.ForeignKey('Country')
Run Code Online (Sandbox Code Playgroud)
我想选择拥有汽车的司机的姓名。
Car.objects.all().values('owner__name')
Run Code Online (Sandbox Code Playgroud)
我是否需要使用 select_related() 方法来避免每个对象的连接,或者它是多余的,因为 values() 方法是隐式的?
Car.objects.all().select_related('owner').values('owner__name')
Run Code Online (Sandbox Code Playgroud)
同样,这次我想要拥有汽车的司机的国家名称。哪一个是最好的?
Car.objects.all().values('owner__country__name')
Car.objects.all().select_related('owner', 'country').values('owner__country__name')
Car.objects.all().select_related('owner__country').values('owner__country__name')
Run Code Online (Sandbox Code Playgroud)