码迷,mamicode.com
首页 > 编程语言 > 详细

开启线程的两种方式,

时间:2018-07-13 20:23:55      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:done   信号量   方法   proc   多个   资源   一个   主线程   无法   

‘‘‘
目录
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())有相同的结果。

开启线程的两种方式,

标签:done   信号量   方法   proc   多个   资源   一个   主线程   无法   

原文地址:https://www.cnblogs.com/lijieshi/p/9306826.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!