zoukankan      html  css  js  c++  java
  • 开启线程的两种方式,

    '''
    目录
    1,开启线程的两种方式*****
    2,线程和进程的区别*****
    3,线程对象的其他方法和属性
    4,守护线程
    5,互斥锁
    6,死锁现象与递过锁
    7,信号量
    '''
    #1 开启线程的两种方式
    import time
    from threading import Thread


    def dask(name):
    print('%s is running '%name)
    time.sleep(1)
    print('%s is done'%name)


    t=Thread(target=dask,args=('egon',))
    t.start()
    print('主')

    # 第二种
    class Mythread(Thread):
    def __init__(self,name):
    super(Mythread, self).__init__()
    self.name=name

    def run(self):
    print("%s is running "%self.name)

    print('%s is done'%self.name)


    t=Mythread('alex')
    t.start()
    print('主')

    # --------------------进程VS线程VS区别--------------------
    #1,线程的开启速度快,线程执行完代码不再存活
    # 主线程执行完毕等所有非守护线程执行完毕才会死亡,因为主进程要回操作系统收资源,
    # 如果子线程还没结束就进行回收,那么子线程就找不到数据

    from threading import Thread
    from multiprocessing import Process
    import time

    def task(name):
    print('%s is running '%name)
    time.sleep(2)
    print('%s is done '%name)

    if __name__ == '__main__':
    t=Thread(target=task,args=('子线程',))
    t.start()
    print('主 ')


    #2.同一进程下的多个线程共享该进程内的数据,子线程可以修改该进程内的数据被其他子线程调用
    #子进程修改全局变量修改的只是自己的,子进程无法修改父进程的资源,因为空间都是物理上的隔离
    from threading import Thread
    import time
    x=100
    def dask():
    global x
    x=88
    print(x)
    time.sleep(1)


    #开启多个子进程多个子进程的PID 都是不一样的,开启多个子线程,多个子线程和主线程的Pid都是一致的

    t=Thread(target=dask)
    t.start()
    t.join() #会等子线程运行完毕才往下走
    print('主',x)

    #查看pid
    from threading import Thread
    import os,time

    def task():
    print(os.getpid())

    t=Thread(target=task)
    t.start()
    print('主',os.getpid())

    # ======================线程对象的其他方法和属性==================#
    #主进程等子进程是因为主进程要给子进程收尸
    #进程必须等待其内部所有线程都隐形完毕才结束
    from threading import current_thread,active_count,enumerate
    import time

    def task(name):
    print('%s is running '%name)
    time.sleep(2)
    print('%s is done'%name)

    t=Thread(target=task,args=('子线程',))
    t.start()
    print('主')


    # ------------------------------------------
    def task():
    print('%s is running '%current_thread().name)
    time.sleep(2)
    print('%s is done'%current_thread().name)#查看当前进程的名字

    print('走到这了')
    t=Thread(target=task,name='xxx')
    t.start()
    t.join()
    print(t.is_alive())#判断进/线程是否存活
    print(t.getName())#拿到线程对象的名字xxx
    print(enumerate())

    current_thread().setName('主线程')
    print('主',current_thread().name)#拿到当前线程的名字

    # Thread实例对象的方法
    # isAlive(): 返回线程是否活动的。
    # getName(): 返回线程名。
    # setName(): 设置线程名。

    # threading模块提供的一些方法:
    # threading.currentThread(): 返回当前的线程变量。
    # threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
    # threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

  • 相关阅读:
    flutter 日常所记
    flutter 项目打包出错问题
    flutter去除白屏,添加启动图
    flutter快捷键总结
    flutter组件总结
    首次使用flutter
    微信小程序引入坐标反解析
    公众号H5引入微信地图组件的正确姿势
    小程序获取unionid的方法
    对比两个文件夹或者文件的差异
  • 原文地址:https://www.cnblogs.com/lijieshi/p/9306826.html
Copyright © 2011-2022 走看看