多线程学习笔记
线程之间的依赖关系,线程锁
#coding=utf-8
"""
进程: 要以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理,网络接口的调用等。。。
对各种资源管理的集合 就可以成为 进程
线程: 是操作系统最小的调度单位, 是一串指令的集合
进程 要操作cpu , 必须要先创建一个线程 ,
所有在同一个进程里的线程是共享同一块内存空间的
进程与线程的区别?
线程共享内存空间,进程的内存是独立的
同一个进程的线程之间可以直接交流,两个进程想通信,必须通过一个中间代理来实现
创建新线程很简单, 创建新进程需要对其父进程进行一次克隆
一个线程可以控制和操作同一进程里的其他线程,但是进程只能操作子进程
"""
import threading
import time
# def run(n):
# print 'it is ',n,threading.current_thread()
# time.sleep(5)
# print 'done'
# t1 = threading.Thread(target = run,args=('x1',))
# t2 = threading.Thread(target = run,args=('x1',))
# t1.start()
# t2.start()
# run('x1')
# run('x1')
class MyThread(threading.Thread): #继承式调用
def __init__(self,n):
super(MyThread,self).__init__()
self.n = n
def run(self):
print 'now run is',self.n,threading.current_thread()
# t1 = MyThread('x1')
# t2 = MyThread('x2')
# t1.start()
# t2.start()
# start_time = time.time() #主线程不会等子线程执行完毕就会继续往下走,所以花费时间的值不是5S
# t_obj = [] #储存线程实例的列表
# for i in range(50):
# t1 = threading.Thread(target=run, args=('x%s'%i,))
# t1.setDaemon(True) #当前线程设置为守护线程,主线程完成之后不会等待守护线程执行到什么进度直接退出。
# t1.start()
# t_obj.append(t1)
# print '__________',threading.active_count()
# # for i in t_obj:
# # i.join() #等待所有线程结束之后再往下继续执行
#
# print 'cost time is ',time.time()-start_time,threading.current_thread(),threading.active_count() #返回当前线程,返回活跃的线程个数
#加入 t1.join()就会等待t1执行完成后再往下走,循环的50个属于子线程,主线程不包含在内,所以当前执行的线程一共有51个
# num = 0
# lock = threading.Lock() #加入进程锁
# def run(n):
# lock.acquire() #获取锁
# global num
# num += 1
# #time.sleep(1) #加入sleep就会变成串行,等待时间释放锁
# lock.release() #释放锁
#
# t_obj = []
# for i in range(50):
# t1 = threading.Thread(target=run, args=('x%s'%i,))
# t1.start()
# t_obj.append(t1)
# for i in t_obj:
# i.join()
#
# print 'now num is ',num
#递归锁
import threading, time
def run1():
print("grab the first part data")
lock.acquire()
global num
num += 1
lock.release()
return num
def run2():
print("grab the second part data")
lock.acquire()
global num2
num2 += 1
lock.release()
return num2
def run3():
lock.acquire()
res = run1()
print('--------between run1 and run2-----')
res2 = run2()
lock.release()
print(res, res2)
# num, num2 = 0, 0
# lock = threading.RLock()
# for i in range(1):
# t = threading.Thread(target=run3)
# t.start()
#
# while threading.active_count() != 1: #等待子进程结束的另一种方式
# print(threading.active_count())
# else:
# print('---- done---')
# print(num, num2)

浙公网安备 33010602011771号