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

     

     

  • 相关阅读:
    jquery 实现 html5 placeholder 兼容password密码框
    php返回json的结果
    使用PHP读取远程文件
    Sharepoint 自定义字段
    Sharepoint 中新增 aspx页面,并在页面中新增web part
    【转】Sharepoint 2010 配置我的站点及BLOG
    JS 实现 Div 向上浮动
    UserProfile同步配置
    【转】Import User Profile Photos from Active Directory into SharePoint 2010
    Sharepoint 2010 SP1升级后 FIMSynchronizationService 服务无法开启
  • 原文地址:https://www.cnblogs.com/foremostxl/p/9732677.html
Copyright © 2011-2022 走看看