写在前面的话:
这是我看视频教程抄的笔记,原本是设置为私密的,没想到在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进程通信的方法!