线程

线程
1 什么是线程
进程其实一个资源单位,而进程内的线程才是cpu上的执行单位
线程其实指的就是代码的执行过程

2 为何要用线程
线程vs进程
1. 同一进程下的多个线程共享该进程内的资源
2. 创建线程的开销要远远小于进程
主线程:进程中自带的线程
开启线程的俩种方式:
from threading import Thread
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=('线程1',))
    t.start()
    print('') #资源 主进程   执行 主线程

结果:
线程1 is running
主
线程1 is done
第一种
from threading import Thread
import time

class Mythread(Thread):
    def run(self):
        print('%s is running' %self.name)
        time.sleep(2)
        print('%s is done' %self.name)

if __name__ == '__main__':
    t=Mythread()
    t.start()
    print('')

结果:
Thread-1 is running
主
Thread-1 is done
第二种

第一个共享资源的例子,后面三个线程对象相关属性和方法

from threading import Thread
n=100
def task():
    global n
    n=0

if __name__ == '__main__':
    t=Thread(target=task)
    t.start()
    t.join()   #主线程等子线程运行完
    print('',n)

结果
主 0
举例
from threading import Thread
import os

def task():
    print('%s is running' %os.getpid())

if __name__ == '__main__':
    t=Thread(target=task)
    t.start()
    print('',os.getpid())
结果:
主 0
9808 is running
主 9808
线程pid
from threading import Thread,active_count
import time
def task(name):
    print('%s is running' %name)
    time.sleep(2)

if __name__ == '__main__':
    t=Thread(target=task,args=('子线程1',))
    t.start()
    t.join() #加了这个,子线程就结束了,还剩一个主线程,注释掉之后,结果会变2
    print('',active_count())

#active_count() 线程活跃的个数
结果:
子线程1 is running
主 1
active_count 线程活跃的个数
from threading import Thread,current_thread
import time

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

if __name__ == '__main__':
    t=Thread(target=task,)
    t.start()
    t.join()
    print('',current_thread().name)

# 结果:
# Thread-1 is running
# 主 MainThread
current_thread 查看当前线程

 

posted @ 2019-07-22 10:31  zhouhao666  阅读(89)  评论(0编辑  收藏  举报