python 多进程运用,运用进程池,多进程加锁

import os,time
from multiprocessing import Process #多进程包
import requests #获取网页源码包
import random #随机数

def download():
    urls=["http://www.baidu.com","http://www.qq.com","http://sohu.com"]
    i=random.randint(0,2)
    response=requests.get(urls[i]) #随机获取一个网页的源码
    print("*******************")
    print(response.text[:200]) #打印获取到的网页源码前200字符

def main():
    print("主进程开始执行-----------------------")
    ps=[] #存放创建的子进程
    for i in range(3):
        p=Process(target=download,name="JC"+str(i),args=()) #target子进程执行的函数,name子进程的名字,args需要给任务传入的参数
        ps.append(p) #将进程存入列表中
    for i in range(3):
        ps[i].start() #将存入列表的进程启动
    print(ps) #查看子进程状态
    for i in range(3):
        ps[i].join() #阻塞主进程,等待子进程执行完毕,主进程才能继续执行下面的代码
    print("主进程执行完毕-------------------------")
    print(ps) #查看子进程状态

if __name__ == '__main__':
    main()

用进程池实现多进程调用

import os,time
from multiprocessing import Pool #多进程包
import requests #获取网页源码包
import random #随机数

def download(arg):
    urls=["http://www.baidu.com","http://www.qq.com","http://sohu.com"]
    i=random.randint(0,2)
    response=requests.get(urls[i]) #随机获取一个网页的源码
    print("*******************")
    print(response.text[:200]) #打印获取到的网页源码

def main():
    ps=Pool(3) #生成有三个进程的进程池,存进变量ps中
    for i in range(5):
        ps.apply_async(download,args=(i,)) #调用进程池中的进程执行download()函数,先执行三个任务,谁先执行完成再执行下一个,直到五个任务执行完毕
    ps.close() #调用完进程后必须关闭进程池
    ps.join() #等待子进程执行完毕
    print("执行完成-----------------")

if __name__ == '__main__':
    main()

多进程加锁

import multiprocessing
import sys
import time

def worker1(lock):
    with lock: #使用with上下文的方式来使用锁
        for i in range(5):
            time.sleep(1)
            print("任务1")

def worker2(lock):
    lock.acquire() #加锁
    try:
        for i in range(5):
            time.sleep(1)
            print("任务2")
    finally:
        lock.release() #释放锁

if __name__ == "__main__":
    lock=multiprocessing.Lock() #实例化进程锁
    ps1=multiprocessing.Process(target=worker1,args=(lock,)) #实例化进程1
    ps2=multiprocessing.Process(target=worker2,args=(lock,)) #实例化进程2
    
    ps1.start()
    ps2.start()
    
    ps1.join()
    ps2.join()
    
    print("程序执行完毕-----------------------")

猜你喜欢

转载自blog.csdn.net/weixin_44123630/article/details/113062986