Skip to content

Commit 8402786

Browse files
author
mohyeah
committed
24/12/15 learning~~
1 parent 09c0378 commit 8402786

4 files changed

Lines changed: 139 additions & 0 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# 多线程间执行是无序的,但是可以保证执行顺序
2+
3+
import threading
4+
import time
5+
6+
def music(times, content):
7+
for i in range(times):
8+
print(content)
9+
time.sleep(0.2)
10+
11+
def coding(times, content):
12+
for i in range(times):
13+
print(content)
14+
time.sleep(0.2)
15+
16+
if __name__ == '__main__':
17+
t1 = threading.Thread(target=music, args=(5, "listening music"))
18+
t2 = threading.Thread(target=coding, kwargs={"times": 5, "content": "coding"})
19+
20+
t1.start()
21+
t2.start()
22+
23+
# 设置守护线程
24+
# t1.threading.Tread(target=music, args=(5, "listening music"), daemon=True)
25+
# 设置守护主线程
26+
# threading.setDaemon(True)
27+
# 等待两个线程执行完毕
28+
t1.join()
29+
t2.join()
30+
print("end of the progress")
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# 1. 导入模块
2+
import threading
3+
import time
4+
5+
def music():
6+
for i in range(10):
7+
print("listening music")
8+
time.sleep(0.2)
9+
10+
def coding():
11+
for i in range(10):
12+
print("coding")
13+
time.sleep(0.2)
14+
15+
if __name__ == '__main__':
16+
# 2. 创建线程对象
17+
music_thread = threading.Thread(target=music)
18+
coding_thread = threading.Thread(target=coding)
19+
# 3. 启动线程 (两者交替执行)
20+
music_thread.start()
21+
coding_thread.start()
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import threading
2+
import time
3+
4+
my_list = []
5+
6+
def add_to_list():
7+
for i in range(3):
8+
my_list.append(i)
9+
print("add:",i)
10+
11+
def read_from_list():
12+
print(my_list)
13+
14+
if __name__ == '__main__':
15+
t1 = threading.Thread(target=add_to_list)
16+
t2 = threading.Thread(target=read_from_list)
17+
18+
# 共享进程内的资源
19+
t1.start()
20+
t2.start()
21+
22+
t1.join()
23+
t2.join()
24+
25+
print("the end of progress")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# 1. 导入socket模块
2+
import socket
3+
import threading
4+
5+
# 6. 定义处理客户端请求的函数
6+
def handle_client_request(new_socket, ip_port):
7+
# 7. 接收客户端发送的数据
8+
recv_data = new_socket.recv(1024)
9+
if recv_data:
10+
recv_data = recv_data.decode('utf-8')
11+
# 8. 获取用户请求的资源数据路径
12+
request_path = recv_data.split(' ')[1]
13+
if request_path == '/' or request_path == '/index.html':
14+
request_path = 'index.html'
15+
try:
16+
with open(request_path, "rb") as file:
17+
data = file.read()
18+
19+
except FileNotFoundError:
20+
response_line = "HTTP/1.1 200 OK\r\n"
21+
response_header = "Server:PWB2.0\r\nContent-type:text/html; charset=utf-8}\r\n"
22+
response_body = "404 Not Found"
23+
24+
response_data = (response_line + response_header + "\r\n" + response_body).encode("utf-8")
25+
26+
new_socket.send(response_data)
27+
else:
28+
# 成功访问的文件
29+
response_line = "HTTP/1.1 200 OK\r\n"
30+
response_header = "Server: PWB2.0\r\n"
31+
response_body = data
32+
33+
response_data = (response_line + response_header + "\r\n").encode("utf-8") + response_body
34+
new_socket.send(response_data)
35+
36+
finally:
37+
# 关闭套接字
38+
new_socket.close()
39+
40+
41+
42+
def main():
43+
# 2. 创建套接字
44+
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
45+
# 设置端口复用
46+
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
47+
# 3. 绑定ip和端口
48+
server_socket.bind(("127.0.0.1", 9999))
49+
# 4. 设置监听
50+
server_socket.listen(128)
51+
# 5. 等待客户端连接
52+
while True:
53+
new_socket, ip_port = server_socket.accept()
54+
print("客户端{}已连接".format(ip_port))
55+
# 创建子线程
56+
sub_thread = threading.Thread(target=handle_client_request, args=(new_socket, ip_port))
57+
# 启动子线程
58+
sub_thread.start()
59+
60+
61+
62+
if __name__ == '__main__':
63+
main()

0 commit comments

Comments
 (0)