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...

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

推荐阅读更多精彩内容

  • Python的多线程只能运行在单核上,各个线程以并发的方法异步运行。而多进程可以利用CPU的多核,进程数取决于计算...
    mysimplebook阅读 4,436评论 0 3
  • 1、什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作...
    一个菜鸟coder阅读 402评论 0 0
  • 1 概念梳理: 1.1 线程 1.1.1 什么是线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中...
    黑涩_阅读 746评论 0 0
  • python之多线程与多进程 关键词: GIL锁,IO繁忙,线程安全,线程同步,进程池,进程通信,队列 GIL锁;...
    theo_NI阅读 481评论 0 0
  • 多进程和多线程的区别 Python多线程的操作,由于有GIL锁的存在,使得其运行效率并不会很高,无法充分利用 多核...
    Java丶python攻城狮阅读 154评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 5,393评论 16 21
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 7,971评论 0 9
  • 可爱进取,孤独成精。努力飞翔,天堂翱翔。战争美好,孤独进取。胆大飞翔,成就辉煌。努力进取,遥望,和谐家园。可爱游走...
    赵原野阅读 1,494评论 1 1
  • 在妖界我有个名头叫胡百晓,无论是何事,只要找到胡百晓即可有解决的办法。因为是只狐狸大家以讹传讹叫我“倾城百晓”,...
    猫九0110阅读 1,428评论 2 3