1 一些标准库
1.1 threading
threading 是 Python 标准库中用于实现多线程编程的模块。它提供了创建和管理线程的功能,使你能够在同一个程序中并发地执行多个任务。
使用 threading 模块,你可以轻松创建多个线程,每个线程可以执行不同的任务,从而提高程序的并发性和响应性。以下是一些常见的 threading 模块的用法:
创建线程:
使用 threading.Thread 类可以创建一个新的线程,你需要将要执行的函数作为参数传递给它。例如:
1 2 3 4 5 6
| import threading
def my_function(): print("Hello from a thread!")
my_thread = threading.Thread(target=my_function)
|
启动线程:
使用 start() 方法来启动线程,它将开始执行你传递的函数。
等待线程完成:
使用 join() 方法可以等待线程执行完成,然后再继续执行主线程的代码。
线程锁(Lock):
在多线程环境中,可能会出现多个线程访问共享资源的问题。使用线程锁可以防止多个线程同时修改共享资源,从而避免竞争条件。
1 2 3 4 5 6 7
| import threading
lock = threading.Lock()
def modify_shared_resource(): with lock:
|
其他功能:
threading 模块还提供了其他一些功能,如定时器、信号量、条件变量等,用于更复杂的多线程编程。
当你使用 threading.Thread 创建一个新线程时,你需要传递一个函数作为 target 参数,这个函数将在新线程中执行。如果这个函数需要参数,你可以使用 args 参数来传递这些参数。以下是一个简单示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import threading
def print_numbers(start, end): for i in range(start, end + 1): print(i)
def print_letters(): for letter in 'abcdefghijklmnopqrstuvwxyz': print(letter)
number_thread = threading.Thread(target=print_numbers, args=(1, 10)) letter_thread = threading.Thread(target=print_letters)
number_thread.start() letter_thread.start()
number_thread.join() letter_thread.join()
print("Both threads have finished.")
|
在这个示例中,我们定义了两个函数 print_numbers 和 print_letters,分别用于打印数字和字母。然后,我们使用 threading.Thread 创建了两个线程,分别传递这两个函数作为 target 参数。print_numbers 函数需要 start 和 end 参数,我们使用 args 参数将这些参数传递给函数。
接着,我们分别启动这两个线程,并使用 join() 方法等待它们执行完成。最后,我们输出 “Both threads have finished.” 来表示两个线程都已经完成了执行。
1.2 Socket常用函数接口及其原理

client
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import socket
target_host = "192.168.233.129" target_port = 6666
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((target_host, target_port))
client.send(b"GET / HTTP/1.1\r\nHost: google.com\r\n\r\n")
response = client.recv(4096)
print(response.decode()) client.close()
|
server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| import socket
def listen_port(): listen_ip = '0.0.0.0' listen_port = 6666
try: server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((listen_ip, listen_port))
server_socket.listen(1)
print(f"正在监听端口 {listen_port} ...")
while True: client_socket, client_address = server_socket.accept()
data = client_socket.recv(1024).decode() print(f"接收到来自 {client_address[0]} 的数据:{data}")
client_socket.close()
except Exception as e: print(f"监听端口时出错:{e}")
if __name__ == "__main__": listen_port()
|