day1111

# ### Manager  list dict 能够实现进程之间的数据共享
"""
如果多个进程同时修改同一份共享数据,这个时候需要加锁,保证数据的准确性

(1) dict list 可以实现进程之间的数据共享
(2) 为了保证数据的准确性,需要加锁
"""
from multiprocessing import Process,Manager,Lock
def work(dic,lock):
	# with 语法 可以自动的上锁和解锁
	with lock:
		dic["count"] -= 1
	"""
	lock.acquire()
	dic["count"] -= 1
	lock.release()
	"""
	
if __name__ == "__main__":
	lst = []
	# 创建一把锁
	lock = Lock()
	m = Manager()
	dic = m.dict( {"count":10000} )
	
	for i in range(100):
		p = Process(target=work,args=(dic,lock))
		p.start()
		lst.append(p)
	
	for i in lst:
		i.join()
	
	print(dic,type(dic))
# ### 守护线程: 等待所有线程全部执行结束之后,在终止,守护所有线程;
"""主线程默认等待所有的子线程;"""
from threading import Thread
import time
def func1():
	while True:
		time.sleep(0.5)
		print("我是子线程func函数")

def func2():
	print("func2 start ...")
	time.sleep(3)
	print("func2 end ... ")

t1 = Thread(target=func1)
# 设置守护线程,在start调用之前进行设置 setDaemon
t1.setDaemon(True)
t1.start()

t2 = Thread(target=func2)
t2.start()

print("我是主线程 ... ")
# ### lock 线程锁,用来保证线程数据安全
from threading import Thread,Lock
n = 0
def func1(lock):
	global n
	
	for i in range(1000000):
		lock.acquire()
		# 写法一		
		n -= 1
		lock.release()
	
def func2(lock):
	global n
	for i in range(1000000):
		# 写法二
		with lock:
			n += 1

if __name__ == "__main__":
	# 创建一把锁
	lock = Lock()
	lst = []
	for i in range(10):
		# 10个线程专门负责加1
		t1 = Thread(target=func1,args=(lock,))
		# 10个线程专门负责减1
		t2 = Thread(target=func2,args=(lock,))
		t1.start()
		t2.start()
		lst.append(t1)
		lst.append(t2)
	
	for i in lst:
		i.join()
		
	print("主线程执行结束 ... ")
	print(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值