Python执行多进程任务的方法

Python的多进程可以借助from multiprocessing import Pool来实现。
简而言之分为这样几步:

  1. 导入包from multiprocessing import Pool
  2. 编写任务函数。def 任务函数(参数)
  3. 实例化进程池并设置进程数。pool=Pool(欲设置的进程数)
  4. 开始布置任务,把多个任务添加进多进程池。pool.apply_async(任务函数,函数对应的参数元组)
  5. 关闭进程池的打包。pool.close()
  6. 开始执行多进程。pool.join()
    具体使用方式详见代码:
import requests
from multiprocessing import Pool

def mission(url,n):   #多进程要调用的任务函数,这里我把视频的编号也带上留作打印
    print(url,"say hi")  #来个标记,打印视频的URL
    response=requests.get(url)    #请求视频内容
    f=open(f"./%03d.ts"%n,"wb")    #打开空文件
    f.write(response.content)    #写入下载内容到空的视频文件中
    f.close()   #写入结束
    print("%03d.ts OK..."%n)   #打印告知视频已写入完毕

if __name__ == "__main__":
    pool=Pool(10)   #设置10个进程
    for n in range(1,7): #我有6小段视频等待爬取
        url = f"https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-{n}.ts"        
        pool.apply_async(mission,(url,n))     #任务函数、视频、编号打包进多进程池里
    pool.close()   #打包完毕

    pool.join()    #开始执行多进程

综上所述。多进程需要这几步:

  1. from multiprocessing import Pool
  2. 编写任务函数。这里我们用的是def mission(url,n):
  3. 实例化,设置进程数。这里我们用的是pool=Pool(10) #设置10个进程
  4. 把多个任务添加进多进程池。这里我们用的是for循环配合pool.apply_async(mission,(url,n))来添加进去,注意apply_async的使用方法是apply_async(任务函数,函数对应的参数元组)
  5. 打包完毕,关闭打包。pool.close()
  6. 开始执行多进程。pool.join()

运行结果:

https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-1.ts say hi
https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-2.ts say hi
https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-4.ts say hi
https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-3.ts say hi
https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-6.ts say hi
https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-5.ts say hi
006.ts OK...
004.ts OK...
002.ts OK...
005.ts OK...
003.ts OK...
001.ts OK...

可见,由于下载和写入文件的速度快慢对每个进程的执行时间是有影响的……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容