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

客户端:

import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip_port = ('127.0.0.1',8080)
client.connect(ip_port)
while True:
    msg = input('>>').strip()
    client.send(msg.encode('utf-8'))
    data = client.recv(1024)
    print(client.decode('utf-8'))
client.close()
View Code

 

3.2、编写一个简单的文本处理工具,具备三个任务:

一个接收用户输入,

一个将用户输入三内容格式化成大写

一个将格式化的结果存入文件

 

from threading import Thread
import time,json
class Mythread(Thread):
    def __init__(self,msg):
        super().__init__()
        self.msg = msg
    def run(self):
        time.sleep(1)
        data = self.msg.upper()
        print('大写:',data)
        with open('db.txt', 'a', encoding='utf-8') as f:
            json.dump(data,f)
if __name__ == '__main__':
    msg = input("请输入英文>>:").strip()
    p = Mythread(msg)
    p.start() # start 会自动调用run 方法
    print('')
View Code

 

 

 

 

 

 

posted on 2018-09-30 17:13  foremost  阅读(173)  评论(0编辑  收藏  举报