thread/ /θred/  /θrɛd/  线程

1、threading模块介绍

multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍

2、开启线程的两种方式

2.1、方式一

 

from threading import Thread
import time
def task(name):
    print(f"{name} is running")
    time.sleep(2)
    print(f"{name} is done")
if __name__ == '__main__':
    p = Thread(target=task,args=('alex',))
    p.start()
    print('')
# 执行程序就开了一个 主进程; 主进程下默认有一个线程
# 该程序 从执行的角度来看是主线程,从资源的角度来看是主进程

 

2.2、方式二

必须有 run函数

from threading import Thread
import time
class task(Thread):
    def __init__(self,name):
        super().__init__()
        self.name = name
    def run(self): # 必须是 -----run函数-------
        print(f"{self.name} is running")
        time.sleep(2)
        print(f"{self.name} is done")
if __name__ == '__main__':
    p = task('alex')
    p.start()
    print('主线程')

3、练习题

3.1、基于多线程实现并发套接字通信

服务端:

import socket
from threading import Thread

def task(conn):
    data = conn.recv(1024)
    print(data.decode('utf-8'))
    conn.send(data.upper())

def server(ip_port):
    Server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    Server.bind(ip_port)
    Server.listen(5)
    while True:
        conn,addr = Server.accept()
        p1 = Thread(target=task,args=(conn,))
        p1.start()


if __name__ == '__main__':
    ip_port = ('127.0.0.1',8080)
    server(ip_port)
View Code

相关文章: