2020年8月8日 / 175次阅读 / Last Modified 2020年8月8日
socket
TCP Server是很常见的应用,python标准库中提供了socketserver模块可以使用,我们也可以自己写,多线程多进程可以更灵活地控制。
多线程tcp server代码:
import socket
import threading
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 12345))
s.listen()
def handle_tcp(sock, addr):
print("new connection from %s:%s" % addr)
sock.send(b'Welcome!')
while True:
data = sock.recv(1024)
if not data:
break
sock.send(b'Hello, %s!' % data)
sock.close()
while True:
sock, addr = s.accept()
t = threading.Thread(target=handle_tcp, args=(sock, addr))
t.start()
将threading模块换成multiprocessing模块,就可以实现多进程tcp server:
import socket
import multiprocessing as mp
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 12345))
s.listen()
def handle_tcp(sock, addr):
print("new connection from %s:%s" % addr)
sock.send(b'Welcome!')
while True:
data = sock.recv(1024)
if not data:
break
sock.send(b'Hello, %s!' % data)
sock.close()
while True:
sock, addr = s.accept()
t = mp.Process(target=handle_tcp, args=(sock, addr))
t.start()
很简单吧。
我们还可以使用一个class来接收新的tcp连接,在__init__函数中做点文章,socketserver模块就是这么干的。
最后说一下s.listen函数,这个函数有个backlog参数,可以定义一个等待连接的队列长度:
socket.listen([backlog])
Enable a server to accept connections. If backlog is specified, it must be at least 0 (if it is lower, it is set to 0); it specifies the number of unaccepted connections that the system will allow before refusing new connections. If not specified, a default reasonable value is chosen.
Changed in version 3.5: The backlog parameter is now optional.
listen函数就不填参数可能是最好的选择。
-- EOF --
本文链接:https://www.pynote.net/archives/2321
前一篇:maily:命令行邮件(批量)发送工具
后一篇:enumerate函数
Ctrl+D 收藏本页
©Copyright 麦新杰 Since 2019 Python笔记