Python Socket 编程详细介绍
前言 之前学习了只用python中的socket模块编程TCP客户端和服务端,本章加入threading模块对服务端进行多线程处理。
一、threading模块
threading 模块中最核心的内容是 Thread 这个类。
创建Thread对象,然后运行起来,每个Thread对象代表一个线程,每个线程可以处理不同的任务,这就是多线程编程。值得注意的是,程序运行时默认就是在主线程上。
创建Thread对象有两种方法:
1.直接创建Thread,然后将一个callable 对象从类的构造器中传递回去,这个callable就是回调函数,用来处理任务。
2.编写一个自定义类继承 Thread,然后复写 run() 方法,在 run() 方法中编写任务处理代码,然后创建这个 Thread 的子类。
下面用种方法直接创建 Thread 对象。
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
Thread构造的方法中target所以我们需要将一个callable对象赋值给它,args这是固定参数,kwargs是可变参数。
二、threading代码示例 1.引入库import threading
在主程序打印5次,在子程序打印5次
代码如下(示例):
#在主程序打印5次,在子程序打印5次 import threading import time def call(): for i in range(5): print('hu ',i) time.sleep(1) thread = threading.Thread(target=call) thread.start() for i in range(5): print('main ', i) time.sleep(1)
运行结果如下:
hu 0 tu 0 hu 1 tu 1 hu 2 tu 2 hu 3 tu 3 hu 4 tu 4
每一个 Thread 都有name 的属性,代表的就是线程的名字,这个可以在构造方法中赋值。
如果在构造方法中没有个 name 赋值的话,默认就是 “Thread-N” 的形式,N 是数字。
import socket #Socket 它提供了标准的BSD Socket API import threading #threading 多线程 bind_ip = "0.0.0.0" bind_port = 555 #创建socket对象 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #绑定套接字地址 server.bind((bind_ip,bind_port)) server.listen(5) #最大连接5 print("[*] Listening on {0}:{1}".format(bind_ip,bind_port)) #客户处理线程 def handle_client(client_socket): request = client_socket.recv(4096).decode()#打印出客户端发送得到内容 print("[*] Received :",request) client_socket.send("ACK!".encode()) client_socket.close() while True: client,adder = server.accept() print("[*] Accepted connection from {0}:{1}".format(adder[0],adder[1])) #挂起客户端线程,处理传入的数据 client_handler = threading.Thread(target=handle_client,args=(client,)) client_handler.start()
总结
这篇文章主要学习对TCP服务端的编写,简单介绍了threading模块。想要深入学习theading模块可以去
https://blog.csdn.net/briblue/article/details/85101144
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)