线程
--进程与线程的区别
进程:每个程序都会有一个进程,负责管理程序各个功能的执行,进程有且只有一个
线程:每个进程里至少有一个线程,称为主线程,除此以外还会有其他线程,称为分线程。线程是控制任务执行的最小单位
-------进程负责控制各个线程的执行,当程序运行,进程启动,程序关闭,进程结束。
--主线程和分线程
1、代码执行默认运行在主线程里面,如果需要执行新的任务,可以开辟分线程
2、分线程个数没有限制,分线程里面的任务结束后,分线程结束
--分线程的使用场景:
1、当有大量任务需要执行的时候,可以将任务放入分线程里面
2、当大量任务需要执行的时候,而任务的执行顺序需要指定的时候,可以使用分线程
3、当界面有大量效果需要更新的时候,需要放入到分线程
--分线程和异步的区别:
1、分线程可以同时开启多个任务,所有的任务分线程自己完成
2、异步 可以同时开启多个任务,但是自己只做一个任务,其他任务命令其他人来完成
同步任务 :上一个任务没有完成,下一个任务不能开启
异步任务:上一个任务没有完成,下一个任务也可以开启
python里面有两个负责线程的模块,thread 和 threading
threading在thread模块基础上做了扩展
代码实现:
import threading
#获取当前线程的名称
print('当前线程为',threading.current_thread().name)
def myThread():
print('位置1',threading.current_thread().name)
print('位置2', threading.current_thread().name)
print('位置3', threading.current_thread().name)
print('位置4', threading.current_thread().name)
print('位置5', threading.current_thread().name)
print('位置6', threading.current_thread().name)
myThread()
class People(object):
def thread_test(self):
print('对象方法',threading.current_thread().name)
p = People()
p.thread_test()
# threading.Thread开辟一个新的线程 target目标
sub_thread = threading.Thread(target=myThread,name = 'newThread')
# sub_thread2 = threading.Thread(target=myThread,name = 'thread2')
#开始执行分线程
sub_thread.start()
#join 确保任务的执行顺序 自己的线程先完成 之后再执行其他线程
sub_thread.join()
# sub_thread2.start()
# 当程序运行时,会想在主线程中执行(因为程序刚开始的时候,只有主线程,没有分线程)
# 然后会根据情况进入到分线程,主线程和分线程的任务是交叉进行的,
# (因为是两个路)自己线程的执行情况不回影响对方线程
# 所以感觉是交叉的
# 分线程代码结束以后,会回到主线程
print('outside1',threading.current_thread().name)
print('outside2',threading.current_thread().name)
print('outside3',threading.current_thread().name)
print('outside4',threading.current_thread().name)
print('outside5',threading.current_thread().name)
代码执行结果: