多线程&多进程

一、多线程

  概念 进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;用户进程就不必我多讲了吧,所有由你启动的进程都是用户进程。进程是操作系统进行资源分配的单位。 它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU。

二、多进程和多线程的区别

  多线程使用的是cpu的一个核,适合io密集型 多进程使用的是cpu的多个核,适合运算密集型 组件 Python提供了非常好用的多进程包,multiprocessing,我们在使用的时候,只需要导入该模块就可以了。 Multiprocessing支持子进程,通信,共享数据,执行不同形式的同步,提供了Process,Pipe, Lock等组件

三、课堂字段,方法补充。

# p = multiprocessing.Process(target=, args=)
# target 指定的是当进程执行时,需要执行的函数
# args 是当进程执行时,需要给函数传入的参数
# 注意: args必须是一个tuple, 特别是当函数需要传入一个参数时 (1,)
# p 代表的是一个多进程,
# p.is_alive() 判断进程是否存活
# p.run() 启动进程
# p.start() 启动进程,他会自动调用run方法,推荐使用start
# p.join(timeout) 等待子进程结束或者到超时时间
# p.terminate() 强制子进程退出
# p.name 进程的名字
# p.pid 进程的pid

案例一、

import multiprocessing

import time

def worker(args, interval):    print("start worker {0}".format(args))    time.sleep(interval)    print("end worker {0}".format(args))

def main():    print("start main")    p1 = multiprocessing.Process(target=worker, args=(1, 1))    p2 = multiprocessing.Process(target=worker, args=(2, 2))    p3 = multiprocessing.Process(target=worker, args=(3, 3))    p1.start()    p2.start()    p3.start()    print("end main")

if __name__ == ‘__main__‘:    main()

案例二、
import multiprocessing

import time

def worker(args, interval):    print("start worker {0}".format(args))    time.sleep(interval)    print("end worker {0}".format(args))

def main():    print("start main")    p1 = multiprocessing.Process(target=worker, args=(1, 1))    p2 = multiprocessing.Process(target=worker, args=(2, 2))    p3 = multiprocessing.Process(target=worker, args=(3, 3))    p1.start()    p1.join(timeout=0.5)    p2.start()    p3.start()    print("the number of CPU is: {0}".format(multiprocessing.cpu_count()))    for p in multiprocessing.active_children():       print("The name of active children is: {0}, pid is: {1} is alive".format(p.name, p.pid))    print("end main")

if __name__ == ‘__main__‘:    main()

案例三、
import time

import multiprocessing

def add1(lock, value, number):    with lock:        print("start add1 number= {0}".format(number))        for i in range(1, 5):            number += value            time.sleep(0.3)            print("number = {0}".format(number))

def add3(lock, value, number):    lock.acquire()    print("start add3 number= {0}".format(number))    try:        for i in range(1, 5):            number += value            time.sleep(0.3)            print("number = {0}".format(number))    except Exception as e:        raise e    finally:        lock.release()        pass

if __name__ == ‘__main__‘:    print("start main")    number = 0    lock = multiprocessing.Lock()    p1 = multiprocessing.Process(target=add1, args=(lock, 1, number))    p3 = multiprocessing.Process(target=add3, args=(lock, 3, number))    p1.start()    p3.start()    print("end main")

案例四、
import time

import multiprocessing

from multiprocessing import Value, Array, Manager

def add1(value, number):    print("start add1 number= {0}".format(number.value))    for i in range(1, 5):        number.value += value        print("number = {0}".format(number.value))

def add3(value, number):    print("start add3 number= {0}".format(number.value))    try:        for i in range(1, 5):            number.value += value            print("number = {0}".format(number.value))    except Exception as e:        raise e

if __name__ == ‘__main__‘:    print("start main")    number = Value(‘d‘, 0)    p1 = multiprocessing.Process(target=add1, args=(1, number))    p3 = multiprocessing.Process(target=add3, args=(3, number))    p1.start()    p3.start()    print("end main")

原文地址:https://www.cnblogs.com/iwss/p/9064412.html

时间: 2024-10-02 12:20:16

多线程&多进程的相关文章

Python有了asyncio和aiohttp在爬虫这类型IO任务中多线程/多进程还有存在的必要吗?

最近正在学习Python中的异步编程,看了一些博客后做了一些小测验:对比asyncio+aiohttp的爬虫和asyncio+aiohttp+concurrent.futures(线程池/进程池)在效率中的差异,注释:在爬虫中我几乎没有使用任何计算性任务,为了探测异步的性能,全部都只是做了网络IO请求,就是说aiohttp把网页get完就程序就done了. 结果发现前者的效率比后者还要高.我询问了另外一位博主,(提供代码的博主没回我信息),他说使用concurrent.futures的话因为我全

多线程多进程基础

看廖雪峰的多线程多进程教程看的云里雾里的,google了一下,贴上来点重点. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间.多任务操作系统可以“并发”执行这些进程. 线程是指进程中乱序.多次执行的代码块,多个线程可以“同时”运行,所以认为多个线程是“并发”的. 多线程vs多进程 操作系统会为每个进程分配不同的内存块,而多个线程共享进程的内存块.这带来最直接的不同就是创建线程的开销远小于创建进程的开销. 同时,由于内存块不同,所以进程之间的通信相对困难.需要采用pipe/n

多线程,多进程选择(了解)

鱼还是熊掌:浅谈多进程多线程的选择 关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害. 经常在网络上看到有的XDJM问“多进程好还是多线程好?”.“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好.根据实际情况来判断,哪个更加合适就是哪个好. 我们按照多个不同的维度,来看看多线程和多进程的对比(注:因为

Git的使用及网络编程多线程多进程

Git的使用 1.打开CMD命令行,输入cd Desktop进入桌面 2.输入 mkdir + 'file name'创建文件,如果已有项目则输入 cd + file name进入文件,如果在Git上已有项目并且在已有项目进行修改,则输入cd clone + url 3.如果第一次使用,则先初始化,git init 4. git add + file name 把项目加入文件夹里面 5.git config -global 全局设置(第一次使用的时候设置) 6. git log 查看日志.git

Python多线程多进程那些事儿看这篇就够了~~

自己以前也写过多线程,发现都是零零碎碎,这篇写写详细点,填一下GIL和Python多线程多进程的坑~ 总结下GIL的坑和python多线程多进程分别应用场景(IO密集.计算密集)以及具体实现的代码模块. 目录   0x01 进程 and 线程 and “GIL” 0x02 python多线程&&线程锁&&threading类 0x03 python队列代码实现 0x04 python之线程池实现 0x05 python多进程并行实现 0x01 进程 and 线程 and “

线程 进程 多线程 多进程

进程和线程的主要区别在于多进程每个进程拥有独立存储空间,而多线程共享存储空间.对于单核CPU来讲,如果是阻塞操作,或者不耗时非阻塞操作,多进程/线程不会提高效率,这时候多进程/线程最有用的通常是耗时而又非阻塞的I/O操作. 打个比喻,一个人要看两部电影,可以看完一部再看另一部,也可以同时看,看一眼这个暂停,看一眼那个再暂停看回前一个,快速不停切换,你会觉得因为两部一起看所以先看完吗?理论上两部电影播放时间加起来是一样,所以看完所用时间应该一样.但是实际使用时间反而可能第一种方法快,为什么?切换是

什么是多线程 多进程

1:要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在. 2:什么是进程? 通过任务管理器我们就看到了进程的存在. 而通过观察,我们发现只有运行的程序才会出现进程. 进程:就是正在运行的程序. 进程是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 3:多进程有什么意义呢? 单进程的计算机只能做一件事情,而我们现在的计算机都可以做多件事情. 举例:一边玩游戏(游戏进程),一边听音乐(音乐进程). 也就是说现在的计算机都是支持多进

python - 多线程/多进程

多线程: import threading from multiprocessing import Queue from time import sleep from bs4 import BeautifulSoup from requests import get import re class myThread(threading.Thread): def __init__(self, qlock, queue): threading.Thread.__init__(self) self.q

Python进阶 - 多线程多进程基础

线程是最小的运行单元,进程是最小的资源管理单元. 串行 就是传统意义上的,同步,顺序的意思 进程:计算机中一个程序在一个数据集上 一次动态执行的过程,主要包含三部分内容 01>程序:描述进程的功能以及处理流程 02>数据集:功能处理过程中需要的资源数据 03>进程控制:严格控制进程执行过程中的各种状态 通俗来说,一个进程就是计算机上正在运行的一个程序 一个软件程序要运行,需要将软件依赖的数据加载到内存中,通过CPU进行运算并按照程序定义的逻辑结构进行流程控制,直到数据处理完成后程序退出