开启线程的两种方式,
Posted lijieshi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开启线程的两种方式,相关的知识,希望对你有一定的参考价值。
‘‘‘
目录
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())有相同的结果。
以上是关于开启线程的两种方式,的主要内容,如果未能解决你的问题,请参考以下文章