Python多线程与多进程

Python多线程模块

  • thread模块
  • threading模块

推荐使用threading模块,因为thread不支持守护线程。当主线程退出时,所有的子线程不管它们是否还在工作,都会被强行退出。有时我们并不希望发生这种行为,这时就引入了守护线程的概念。threading模块支持守护线程。

#多线程
def music(name,loop):
	for i in range(loop):
		print(‘listen music %s %s’%(name,time.ctime()))
		time.sleep(1)

def movie(name,loop):
	for i in range(loop):
		print(‘look movie %s %s’%(name,time.ctime()))
		time.sleep(1)

#创建多线程
t1 = threading.Thread(target=music,args(‘爱的故事上集’,4))
t2 = threading.Thread(target=movie,args(‘肖申克的救赎’,4))

#子线程:包含在threading.Thread中,里面均视为子线程
#主线程:除了“不包含在Thread里面的程序”,UI界面和Main函数均视为主线程
if __name__ ==‘__main__’:
	#守护主线程,主线程结束杀死子线程
	t1.setDaemon(True)
	t2.setDaemon(True)
	#启动线程
	t1.start()
	t2.start()
	#join可以对主线程进程阻塞,等所有子线程运行结束再运行主线程
	t1.join()
	t2.join()

Python多进程

p1 = multiprocessing.Process(target=music,args(‘爱的故事上集’,4))
p2 = multiprocessing.Process(target=movie,args(‘肖申克的救赎’,4))

Lock

同步执行

一个进程在执行任务时,另一个进程必须等待执行完毕,才能继续执行,加锁可以保证多个进程修改同一块数据时,同一时间只能有一个任务可以进行修改。速度是慢了,但牺牲了速度却保证了数据安全。

异步执行

一个进程在执行任务时,另一个进程无需等待其执行完毕就可以执行。

lock = multiprocessing.lock()
p1 = multiprocessing.Process(target=music,args(‘爱的故事上集’,4),lock)
p2 = multiprocessing.Process(target=movie,args(‘肖申克的救赎’,4),lock)
def music(…):
	…
	lock.acquire()
	…
	lock.release()
…

Pool

#创建进程池
p = multiprocessing.Pool(3)
for i in range(5):
	#创建5个进程,依次进入进程池
	p.apply_async(movie,args(‘肖申克的救赎’,1))

Queue

进程彼此之间相互隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列Queue和管道Pipe,这两种方式都是使用消息传递的。

#put 向消息队列中发送数据
#get 接收消息队列中的数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值