美文网首页
Python 多进程操作

Python 多进程操作

作者: sunshaoping | 来源:发表于2018-08-24 16:25 被阅读0次

进程与线程
1.定义
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分配的基本单位,它是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,它可以同属于一个进程的其他线程共享进程所拥有的全部资源。
2.关系
一个线程可以创建和撤销另一个线程,同一个进程之间的多个线程可以并发执行。
3.区别
进程和线程的主要差别在于他们是不同的操作系统资源管理方式。进程拥有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程只是进程中的不同执行路径。线程又自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但是在切换时,耗费资源较大,效率要差一些。
一.Process(用于创建进程):通过创建一个Process对象然后调用它的start()方法来生成进程。

from multiprocessing import Process     # 导入需要的模块
import os

# 定义进程要执行的任务
def run_proc(name):
    print("子进程的进程号为 %s (%s)..." %(name, os.getppid())) # os.getppid()获取当前进程的进程号

if __name__ == '__main__':
    print("父进程的进程号为 %s " % os.getppid())  # 获取当前父类进程的进程号
    p = Process(target=run_proc, args=("1"))    # 实例化进程
    print("子进程将要启动...")
    p.start()
    p.join()
    print("子进程结束...")

二.Pool(用于创建进程管理池):可以创建一个进程池,该进程将执行与Pool该类一起提交给它的任务,当子进程较多需要管理时使用。

from multiprocessing import Pool    # 引入进程池
import os,time,random

def long_time_task(name):
    print("子进程运行进程号 %s (%s)..."%(name,os.getppid()))
    start = time.time()
    time.sleep(random.random() * 3)
    end = time.time()
    print("任务%s运行时间%0.2f seconds" %(name,(end-start)))

if __name__ == '__main__':
    print("父进程运行进程号 %s" % os.getppid())
    p = Pool(2)
    for i in range(5):
        p.apply_async(long_time_task, args=(i,))
    print("等待所有子进程开始...")
    p.close()
    p.join()
    print("所有进程执行完毕...")
# 在此次任务中,设置进程池的数量为4个,这样在执行任务的时候
# 会先执行前面4个任务,第5个任务需要等前面4个的任务执行完毕
# 之后才会执行下一轮的任务。

三.Queue(用于进程通信,资源共享):进程间通信,保证进程安全。

# 进程间通信,以Queue为例,在父进程中创建两个子进程,一个网Queue里写数据,
# 一个从Queue里读取数据
from multiprocessing import Process,Queue
import os,time,random

# 写数据进程执行的代码
def write(q):
    print("Process to write: %s" % os.getppid())
    for value in ["A","B","C"]:
        print("Put %s to queue..." % value)
        q.put(value)
        time.sleep(random.random())

# 读数据进程执行的代码
def read(q):
    print("Process to read :%s" % os.getppid())
    while True:
        value = q.get(True)
        print("Get %s from queue" % value)

if __name__ == '__main__':
    q = Queue() # 通过父进程创建Queue,并传递给各个子进程
    pw = Process(target=write, args=(q,))
    pr = Process(target=read, args=(q,))
    pw.start()  # 启动子进程,写入
    pr.start()  # 启动子进程,读取
    pw.join()   # 等待pw结束
    pr.terminate() # pr进程是死循环,无法等待期结束,只能强行停止

相关文章

  • s9python并发编程

    python之路——操作系统的发展史python之路——博客目录 书籍推荐:现代操作系统 进程 进程 join()...

  • 计算机基础

    Python基础 列表与元组的区别 Python多进程 操作系统基础 操作系统与多进程 计算机网络基础 三次握手 ...

  • 第9天续,进程

    @(python)[笔记] 目录 一、什么是进程 1.1 进程的概念 进程的概念起源于操作系统,是操作系统最核心的...

  • python笔记-使用多线程技术加速爬虫

    multiprocessing是Python的一个多进程库,它可以实现多进程的操作。但是由于进程与进程之间不能直接...

  • python 07 进程和线程

    多进程。 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识。 Uni...

  • Python实战计划——第二周第三节:多进程爬虫的数据抓取

    Python set的操作多进程multiprocessing中进程池Pool()以及方法map的用法更为详细的有...

  • Python——多进程操作

    进程是正在执行中的应用程序,一个进程包含了该应用程序的所有信息。计算机中多线程的操作已经可以实现多人物的处理机制了...

  • Python 多进程操作

    进程与线程1.定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个...

  • 【python】进程间通信:Queue的详细用法

    关于python 进程间通信 Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信。 进程间通...

  • python 多进程和多线程

    多进程 要让python程序实现多进程,我们先了解操作系统的相关知识。 Unix、Linux操作系统提供了一个fo...

网友评论

      本文标题:Python 多进程操作

      本文链接:https://www.haomeiwen.com/subject/mwxiiftx.html