博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程相关操作
阅读量:4335 次
发布时间:2019-06-07

本文共 3798 字,大约阅读时间需要 12 分钟。

python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。

Python提供了multiprocessing。multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。

 

简单的进程程序:

import multiprocessing  #引入模块def task(arg):    print(arg)def run():    for i in range(10):#循环创建十个进程        p=multiprocessing.Process(target=task,args=(i,))        p.start() #准备好执行进程if __name__=="__main__":    run()

常用功能:

join():括号内有参数时,指定等待子进程的时间,时间到了以后继续向下执行,无参数时,等待子进程执行完毕以后继续向下执行.

daemon():括号内默认值是False,手动改成True后,优先执行主进程,执行完不等待子进程是否已经执行完.

name():创建进程名称   name=multiprocessing.current_process()#获取线程名字

 

创建进程(两种方式):

1 类继承方法创建:

import multiprocessingclass MyProcess(multiprocessing.Process):    def run(self):        print("当前进程是:",multiprocessing.current_process())def run():    p1=MyProcess()#进程一    p1.start()  #自动执行类里面的run方法    p2=MyProcess()    p2.start()#进程二if __name__=="__main__":    run()

2普通方法

import multiprocessingdef task():    print("当前进程是:",multiprocessing.current_process())def run():    for i in range(2):        p=multiprocessing.Process(target=task,)        p.start()if __name__=="__main__":    run()

 

数据共享:

1 Queue:

import multiprocessingdef task(arg,q):    q.put(arg)if __name__=="__main__":    q = multiprocessing.Queue()    for i in range(10):        p = multiprocessing.Process(target=task,args=(i,q,))        p.start()    while True:        v = q.get()        print(v)
import mulprocessingq = multiprocessing.Queue()    def task(arg,q):    q.put(arg)def run():    for i in range(10):        p = multiprocessing.Process(target=task, args=(i, q,))    p.start()    while True:    v = q.get()    print(v)run()
linux

2 Manger:

import multiprocessingimport timedef func(arg,dic):    time.sleep(2)    dic[arg] = 100if __name__ == "__main__":    m = multiprocessing.Manager()    dic = m.dict()    process_list = []    for i in range(10):        p = multiprocessing.Process(target=func, args=(i, dic,))        p.start()        process_list.append(p)    while True:        count=0        for p in process_list:            if not p.is_alive():                count+=1        if count==len(process_list):            break    print(dic)

 

进程锁:与线程用法一致.

import timeimport multiprocessinglock = multiprocessing.RLock()def task(arg):    print('鬼子来了')    lock.acquire()    time.sleep(2)    print(arg)    lock.release()if __name__ == '__main__':    p1 = multiprocessing.Process(target=task,args=(1,))    p1.start()    p2 = multiprocessing.Process(target=task, args=(2,))    p2.start()

 

进程池:限制进程最多创建的数

import multiprocessingfrom concurrent.futures import ProcessPoolExecutordef task():    print("当前进程是:",multiprocessing.current_process())    time.sleep(1)if __name__=="__main__":    pool=ProcessPoolExecutor(5)    for i in range(10):        pool.submit(task,)打印结果为:当前进程是: 
当前进程是:
当前进程是:
当前进程是:
当前进程是:
一秒钟以后:当前进程是:
当前进程是:
当前进程是:
当前进程是:
当前进程是:

 

简单爬虫:

import requestsfrom bs4 import BeautifulSoupfrom concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutordef task(url):    print(url)    r1=requests.get(url=url,headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'         })    #查看下载下来的文本信息    soup=BeautifulSoup(r1.text,'html.parser')    print(soup.text)    # content_list=soup.find('div',attrs={'id':content_list})    # for item in content_list.find_all('div',attr={'class':'item'})    #       title = item.find('a').text.strip()    #       target_url = item.find('a').get('href')    #       print(title,target_url)def run():    pool=ThreadPoolExecutor(5)    for i in range(1,50):        pool.submit(task,'https://dig.chouti.com/all/hot/recent/%s'%i)

 

转载于:https://www.cnblogs.com/lingcai/p/9636363.html

你可能感兴趣的文章
小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-02 Netflix开源组件断路器
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-04 feign结合hystrix断路器开发实战下...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-03 feign结合hystrix断路器开发实战上...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_6-01 微服务网关介绍和使用场景
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-05熔断降级服务异常报警通知
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-08 断路器监控仪表参数
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-3.热部署在Eclipse和IDE里面的使用...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-3.在线教育站点需求分析和架构设计...
查看>>
UI基础--烟花动画
查看>>
oracle之三 自动任务调度
查看>>
Android dex分包方案
查看>>
ThreadLocal为什么要用WeakReference
查看>>
删除本地文件
查看>>
FOC实现概述
查看>>
base64编码的图片字节流存入html页面中的显示
查看>>
这个大学时代的博客不在维护了,请移步到我的新博客
查看>>
GUI学习之二十一——QSlider、QScroll、QDial学习总结
查看>>