Python进程(Process,Pool)

写在前面的话:
这是我看视频教程抄的笔记,原本是设置为私密的,没想到在APP里不能看。为了能够在APP里看,我只能公开,如有冒失或是侵权,请告知,也深表歉意!

from multiprocessing import Process #导入Process模块

def test():
	while True:
		print("---hello world---")
		time.sleep(1)

p = Process(target=test)	#创建对象
p.start()			#让这个进程开始执行test函数里的代码
p.join()	#堵塞 。只有等到进程完成后才会执行下面的函数

while True:
	print("---main---")
	time.sleep(1)


进程的创建-Process子类:
from multiprocessing import Process
class myProcess(Process):
	def run(self):
		while True:
			print("---1---")
			time.sleep(1)


p = myProcess()
p.start()

while True:
	print("---main---")
	time.sleep(1)

进程池Pool
当需要创建的子进程数量不多时,可以直接利用multiprocess中的Process动态生成多个进程,但如果
是上百万甚至上千个目标,手动去创建进程的工作量是巨大的,此时就可以用到multiprocessing模块
提供的Pool方法。
初始化Pool时,可以指定一个最大进程数,当有新的请求提交到Pool时,如果池还没有满,那么就会创
建一个新的进程用来执行该请求。但如果池中的的进程已达到指定的最大值,那么该请求就会等待,直到
池中的进程结束,才会创建新的进程来执行。

from multiprocessing import Pool
imoprt os,time

def worker():
	for i in range(5):
		print("===pid=%d===num=%d"%(os.getpid(),num))
		time.sleep()


pool = Pool(3)	#3表示进程池中最多有3个进程一起执行
for i in range(10):
	print("---%d---"%i)
	#向进程池中添加任务
	#注意:如果添加的任务超过了进程池的个数的话,那么不会导致添加不进去
	#	添加到进程池中的任务,如果还没有被执行的话,那么此时,他们会等待池中的任务完成之后,会自动去用刚刚那么进程,完成当前的新任务
	pool.apply_async(worker,(i,))
pool.close()	#关闭进程池,相当于不能够再次添加新任务了
pool.joinc()	#主进程 创建/添加 任务后,主进程默认不会等待进程池中的任务执行完后才结束,而是当主进程的任务做完之后,立马结束,,如果这个地方没有join,会导致进程池中的任务不会执行

进程间通信-Queue(队列)
from multiprocessing import Queue
q = Queue()
q.put() #往里面放消息
q.get() #取出消息
q.full()#如果队列满了,返回True,反之False
q.qsize()#返回当前队列包含的消息数量;


进程池中的通信
from multiprocessing import Manager,Pool
q = Manager().Queue() #这是进程池中使用Queue进程通信的方法!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值