zoukankan      html  css  js  c++  java
  • 7 并发编程-(线程)-开启线程的两种方式

    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

     

     

  • 相关阅读:
    【杂谈】对RMI(Remote Method Invoke)的认识
    【杂谈】对CopyOnWriteArrayList的认识
    【杂谈】Java I/O的底层实现
    揭开Future的神秘面纱——结果获取
    揭开Future的神秘面纱——任务执行
    【详解】ThreadPoolExecutor源码阅读(三)
    【详解】ThreadPoolExecutor源码阅读(二)
    【详解】ThreadPoolExecutor源码阅读(一)
    小程序页面数据回传
    记录一个吃过前端内存的坑
  • 原文地址:https://www.cnblogs.com/foremostxl/p/9732677.html
Copyright © 2011-2022 走看看