python 开启进程两种方法 multiprocessing模块 介绍

一 multiprocessing模块介绍

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

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

multiprocessing模块的功能众多:支持子进程、通信和共享数据、执行不同形式的同步,>提供了Process、Queue、Pipe、Lock等组件。

需要再次强调的一点是:与线程不同,进程没有任何共享状态,进程修改的数据,改动仅限于该进程内。

三 Process类的使用

创建并开启子进程的方式一

Process 传字典 或者args 传参数也可以

start()开启子进程

from multiprocessing import Process
import time

def task(name):

    print("%s is running" % name)
    time.sleep(3)
    print("%s is done" % name)

if __name__ == "__main__":

    # 实例化
    # args 为函数传参数
    t = Process(target=task, args=("子进程1",))
    # 开启子进程
    t.start()   # 仅仅只是给操作系统发送一个信号 与平常print没有什么区别

    print("主")

‘‘‘
主
子进程1 is running
子进程1 is done
‘‘‘

‘‘‘
看得出是先打印主 再开启子进程1的
‘‘‘

用关键字参数kwargs传参

from multiprocessing import Process
import time

def task(name):

    print("%s is running" % name)
    time.sleep(3)
    print("%s is done" % name)

if __name__ == "__main__":

    # 实例化
    # 也可以用kwargs 为函数传参数 以字典方式
    t = Process(target=task, kwargs={‘name‘: ‘子进程1‘})
    t.start()

‘‘‘
子进程1 is running
子进程1 is done
‘‘‘

应用程序是开不了子进程的 p.start() 给操作系统发送信号 至于操作系统什么时候开进程,开多长时间应用程序是控制不了。

p.start() 给操作系统发送信号 告诉操作系统给个开个子进程吧  操作系统收到后 申请内存空间 把父进程的地址空间数据 拷贝给子进程

作为子进程的初始状态

父进程不知道操作系统会

默认是先 开启主进程执行,主进程执行完,再开启 子进程执行,再到子进程执行结束。

创建并开启子进程的方式二

自己写一个子类去继承他 不用默认的类
方法一定要写run
from multiprocessing import Process
import time

# 自己写一个子类去继承他 不用默认的类
# Process的类传进去

class MyProcess(Process):

    # 重写了init方法 父类就被覆盖掉
    def __init__(self, name):

        # 重用父类 因为父类还有很多有用功能,继承父类
        super().__init__()
        self.name = name

    # 方法一定要写run
    def run(self):
        print("%s is running" % self.name)
        time.sleep(3)
        print("%s is done" % self.name)

if __name__ == "__main__":

    # 实例化 直接用自己自定义的类开子进程
    # args 为函数传参数
    p = MyProcess("子进程1")
    # 开启子进程
    p.start()   # 仅仅只是给操作系统发送一个信号 与平常print没有什么区别

    # p.start() 本质是调用run方法
    print("主")

原文地址:https://www.cnblogs.com/mingerlcm/p/8986623.html

时间: 2024-11-09 00:57:41

python 开启进程两种方法 multiprocessing模块 介绍的相关文章

PHP中数组合并的两种方法及区别介绍

PHP数组合并两种方法及区别 如果是关联数组,如下: 复制代码代码如下: $a = array( 'where' => 'uid=1', 'order' => 'uid', ); $b = array( 'where' => 'uid=2', 'order' => 'uid desc', ); 1. array_merge,如果两个数组存在相同的key,后面的一个会覆盖前面的 复制代码代码如下: <?php $c = array_merge($a, $b); var_expo

python爬虫:两种方法模拟登录博客园

第一方法用第三方库(requests):参考http://www.mamicode.com/info-detail-1839685.html 源代码分析 博客园的登录页面非常简单,查看网页源代码,可以发现两个输入框的id分别为input1.input2,复选框的id为remember_me,登录按钮的id为signin. 还有一段JavaScript代码,下面来简单分析一下. 先来看$(function(){});函数: 1 $(function () { 2 $('#signin').bind

python 日志输出模块--两种方法

第一种方法:(推荐) import logging.handlers LOG_FILE = r'tst.log' handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes=1024 * 1024, backupCount=5, encoding='utf-8') # 实例化handler fmt = '%(asctime)s - %(levelname)s - %(message)s' formatter = loggin

从模块到python文件的两种用法

01模块的四种形式 模块 就是从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名是test.py的话,它的对应模块名就是test) 包 用来从逻辑上组件模块,本质就是一个目录(必须带有一个__init__.py文件) 导入模块 本质就是把python文件解释一遍 导入包 本质就是执行该报下的__init__.py文件:如果要导入包下面的模块:需要先导入包,然后从包下的__init__.py文件中再导入该包下的模块 python可以看成

python中执行shell的两种方法总结

这篇文章主要介绍了python中执行shell的两种方法,有两种方法可以在Python中执行SHELL程序,方法一是使用Python的commands包,方法二则是使用subprocess包,这两个包均是Python现有的内置模块.需要的朋友可以参考借鉴,下面来一起看看吧. 一.使用python内置commands模块执行shell commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态: 该命令目前已经废弃,被s

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控 1.自带监控模板进行os的监控 进入/usr/local/zabbix/etc/zabbix_agentd.conf 配置文件修改 LogRemoteCommands=1     ###开启脚本功能 Server=192.168.5.129     ##修改zabbix指向的服务器: 重启zabbix_agentd.zabbix_server服务 在配置-->主机-->添加主机--> 配置主机信息主

python多级比较的两种方法

Description 大家都知道在电商网站上买东西时,网站会根据我们的搜索条件给出非常多的商品.这些商品会以依据某一种排序规则进行排序,依次呈现在我们面前.现在某电商网站关于书籍的排序依据有这么几项,综合.销量.出版时间.价格.用户评分.假设综合排名的规则为:首先看价格,价格低的排名靠前,如果价格相同,则看出版时间,出版的晚的排名靠前,如果这两项都相同则看销量,销量大的靠前,如果前三项均相同,最后看用户评分,用户评分高的排名靠前. 请依据此规则写一段给各个书按综合排名的程序. Input 第一

两种方法实现python操作日志的封装

方法1 import logging class Log(object): def __init__(self, name=__name__, path='mylog.log', level='DEBUG'): self.__name = name self.__path = path self.__level = level self.__logger = logging.getLogger(self.__name) self.__logger.setLevel(self.__level) d

python list排序的两种方法及实例讲解

对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Python实例: >>> list = [2,5,8,9,3] >>> list [2,5,8,9,3] >>> list.sort() >>> list [2, 3, 5, 8, 9] 方法2.用序列类型函数sorted(list)进行排