• 线程1


    老师的博客地址:http://www.cnblogs.com/Eva-J/articles/8306047.html

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

    from threading import Thread
    def fun1(n):
        a=40
        print(n,'i am the 1 thread')
        print('i am fun1 a:',a)
    class fun2(Thread):
        a = 40
        print(a)
        def __init__(self,n):
            super(fun2, self).__init__()
            self.n=n
        def run(self):
            print(self.n,'i am the 2 thread ')
            print('i am fun2 a:', self.a,a)
    a=100
    func1=Thread(target=fun1,args=(1,))
    func1.start()
    func2=fun2(2)
    func2.start()
    print(a)
    '''发现子线程的变量不与主线程共享,除非声明了global
    如果子线程没有便用主线程的
    另外如果主线程和子线程都有某个变量,在子线程没有声明的情况下不要去使用
    这个变量'''
    # 进程 是 最小的 内存分配单位
    # 线程 是 操作系统调度的最小单位
    # 线程直接被CPU执行,进程内至少含有一个线程,也可以开启多个线程
    # 开启一个线程所需要的时间要远远小于开启一个进程
    # 多个线程内部有自己的数据栈,数据不共享
    # 全局变量在多个线程之间是共享的
    # GIL锁(即全局解释器锁)
    # 在Cpython解释器下的python程序 在同一时刻 多个线程中只能有一个线程被CPU执行
    # 高CPU : 计算类 --- 高CPU利用率
    # 高IO : 爬取网页 200个网页
    # qq聊天 send recv
    # 处理日志文件 读文件
    # 处理web请求
    # 读数据库 写数据库
     
    import threading
    import os
    import time
    def fun(n):
    time.sleep(1)
    n+=1
    print(threading.get_ident(),threading.current_thread(),os.getpid())
    for i in range(10):

    t=threading.Thread(target=fun,args=(i,))
    t.start()
    print(threading.get_ident(),threading.current_thread(),os.getpid())#查看线程号的,查看当前线程的名字,查看进程号
    print(threading.active_count())#查看当前还活着的线程号的个数
    print(threading.enumerate())#查看当前还活着的线程号的名字,返回其列表
    #threadingactive_count(),threading.enumerate()是查看现在还运行的线程,如果函数不睡上一秒的话,返回值就是1和元素为1的列表了
    
    

     利用线程实现多人聊天

    server端

    import socket
    import threading
    
    server=socket.socket()
    ip_port=('192.168.43.155',8899)
    server.bind(ip_port)
    
    
    def chat(client, address):
        while 1:
            message=client.recv(1024).decode('utf-8')
            if message=='bye':
                break
            print('33[33ma message come from %s:33[0m'%str(address),message)
            info=input('33[32mreplay:33[0m').encode('utf-8')
            client.send(info)
        client.close()
    while 1:
        server.listen()
        client, address = server.accept()
        t=threading.Thread(target=chat,args=(client, address))
        t.start()

    client端

    import socket
    import threading
    
    client=socket.socket()
    ip_port=('192.168.43.155',8899)
    client.connect(ip_port)
    while 1:
        info = input('33[32mwath you want to say:33[0m').encode('utf-8')
        client.send(info)
        if info==b'bye':
            client.close()
        message=client.recv(1024).decode('utf-8')
        print(message)

    聊是能聊,就是有点乱

     总结

    # 正确的学习方法
        # input
        # output
        # correct 纠正
    
    # 线程
        # 线程是进程中的执行单位
        # 线程是cpu执行的最小单位
        # 线城之间资源共享
        # 线程的开启和关闭以及切换的时间开销远远小于进程
        # 线程本身可以在同一时间使用多个cpu
    # python 与 线程
        # Cpython解释器在解释代码过程中容易产生数据不安全的问题
        # GIL 全局解释器锁 锁的是线程
    # threading

  • 相关阅读:
    8086汇编 学习1
    微信小程序 websocket+node.js(ws)
    kali安装google 浏览器
    bugkuctf Easy_Re
    课设记录-Day06
    GitLab使用教程
    课设记录-Day05
    课设记录-Day04
    课设记录-Day03
    课设记录-Day02
  • 原文地址:https://www.cnblogs.com/accolade/p/10584371.html
Copyright © 2020-2023  润新知