Python进程学习

进程

1 - 进程数据是不共享的

data_list = []
			def task(arg):
				data_list.append(arg)
				print(data_list)


			def run():
				for i in range(10):
					p = multiprocessing.Process(target=task,args=(i,))
					# p = threading.Thread(target=task,args=(i,))
					p.start()

			if __name__ == '__main__':
				run()

2- 如何数据共享

1:queue共享

linux:
				import multiprocessing
				q = multiprocessing.Queue()

				def task(arg,q):
					q.put(arg)

				def run():
					for i in range(10):
						p = multiprocessing.Process(target=task, args=(i, q,))
						p.start()

					while True:
						v = q.get()
						print(v)

				run()
			windows:	
				def task(arg,q):
					q.put(arg)

				if __name__ == '__main__':
					q = multiprocessing.Queue()
					for i in range(10):
						p = multiprocessing.Process(target=task,args=(i,q,))
						p.start()
					while True:
						v = q.get()
						print(v)

2-Manager共享

Linux:
				import multiprocessing
				m = multiprocessing.Manager()
				dic = m.dict()

				def task(arg):
					dic[arg] = 100

				def run():
					for i in range(10):
						p = multiprocessing.Process(target=task, args=(i,))
						p.start()

					input('>>>')
					print(dic.values())
					
				if __name__ == '__main__':
					
					run()
			windows:
				def task(arg,dic):
					time.sleep(2)
					dic[arg] = 100

				if __name__ == '__main__':
					m = multiprocessing.Manager()
					dic = m.dict()

					process_list = []
					for i in range(10):
						p = multiprocessing.Process(target=task, args=(i,dic,))
						p.start()

						process_list.append(p)

					while True:
						count = 0
						for p in process_list:
							if not p.is_alive():
								count += 1
						if count == len(process_list):
							break
					print(dic)

3-进程锁

			import time
			import threading
			import multiprocessing


			lock = multiprocessing.RLock() 	
			#这里用的是multiproceesing    
			def task(arg):
				print('鬼子来了')
				lock.acquire()
				time.sleep(2)
				print(arg)
				lock.release()

			if __name__ == '__main__':
				p1 = multiprocessing.Process(target=task,args=(1,))
				p1.start()

				p2 = multiprocessing.Process(target=task, args=(2,))
				p2.start()

4-进程池

import time
		from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor

		def task(arg):
			time.sleep(2)
			print(arg)

		if __name__ == '__main__':

			pool = ProcessPoolExecutor(5)
			for i in range(10):
				pool.submit(task,i)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值