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
    评论
Python进程池是一种用于并行处理任务的机制,它可以有效地利用多核处理器的优势来提高程序的执行效率。而`map`函数是进程池中的一个常用方法,它可以将一个可迭代对象中的每个元素传递给指定的函数进行处理,并返回处理结果的列表。 使用进程池的`map`函数可以简化并行处理任务的编程过程。它接受两个参数:第一个参数是一个函数,用于对可迭代对象中的每个元素进行处理;第二个参数是一个可迭代对象,包含需要处理的数据。`map`函数会自动将可迭代对象中的元素分配给进程池中的空闲进程进行处理,并返回处理结果的列表。 下面是一个使用进程池`map`函数的示例代码: ```python import multiprocessing # 定义一个用于处理任务的函数 def process_task(item): # 对每个元素进行处理 result = item * 2 return result if __name__ == '__main__': # 创建进程池,指定进程数量 pool = multiprocessing.Pool(processes=4) # 定义需要处理的数据 data = [1, 2, 3, 4, 5] # 使用进程池的map函数进行并行处理 results = pool.map(process_task, data) # 打印处理结果 print(results) ``` 在上述示例中,我们首先定义了一个用于处理任务的函数`process_task`,它将每个元素乘以2作为处理结果。然后,我们创建了一个进程池`pool`,指定了进程数量为4。接下来,定义了需要处理的数据`data`,它是一个包含了5个整数的列表。最后,使用进程池的`map`函数对数据进行并行处理,并将处理结果保存在`results`列表中。最终,我们打印出了处理结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值