python多进程多线程的区别

进程与线程

进程

进程模块,multiprocessing  的 Process

进程的创建 变量 =  Process(target = 指定函数,args = (1,))指定函数参数

这样我们就创建了一个进程,target 无需加括号!

我们通过 变量.start() 调用某进程, 然后使用:变量.join()阻塞母进程,

让母进程等待子进程执行完毕.否则就母进程先执行了,

那样就达不到我们想要的结果了.

有的时候有可能串行比并行要快,并行来回切换有可能用的时间更长!

假设中间有停顿的话,比如time.sleep(2) 那么并行一定比串行快.

并行两个sleep同时运行,所以要快,串行则需要执行两遍sleep,时间长的多.

a = Process(target = 函数,args = 函数参数) 函数无需加括号

a.start() 启动进程  a.join() 阻塞母进程,让子进程先执行.

进程池

from multiprocessing import Pool,cpu_countimport os,timedef long_time_task(i):    print(‘我是子进程:{},进程ID:{}‘.format(i,os.getpid()))    time.sleep(2)  #当某进程执行到这时,因为需要等待时间,所以系统自动跳到下个进程    #把需要等待时间的进程前部,逐一执行!,后面又重新逐一调用等待时间后的进程  #也就是阻塞住了,所以利用阻塞的时间启动下个进程,当第1个进程执行完阻塞前和阻塞后的任务是,  #才能进入新的进程!    print(i,‘结果:{}‘.format(8**20))

if __name__ == ‘__main__‘:    start = time.time()    print(‘cpu内核数:{}‘.format(cpu_count()))    print(‘当前母进程:{}‘.format(os.getpid()))    p = Pool(4) #创建进程池    for i in range(5): #        p.apply_async(long_time_task,args=(i,))    print(‘等待子进程执行!‘)    p.close() #关闭进程池,并启动4个进程,第5个进程则需要等第1个的进程完毕才能进入    p.join() #阻塞进程池的进程    print(‘总用时:{}‘.format(time.time() - start)) #得出总时长

原文地址:https://www.cnblogs.com/lc1013/p/10306482.html

时间: 2024-07-31 06:58:51

python多进程多线程的区别的相关文章

python 多进程/多线程/协程 同步异步

这篇主要是对概念的理解: 1.异步和多线程区别:二者不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段.异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情.实现异步可以采用多线程技术或则交给另外的进程来处理.多线程的好处,比较容易的实现了 异步切换的思想, 因为异步的程序很难写的.多线程本身程还是以同步完成,但是应该说比效率是比不上异步的. 而且多线很容易写, 相对效率也高. 2.异步和同步的区别:  在io等待的时候,同步不会切走,浪费了时间.异

(转)多进程 & 多线程的区别与适用场景

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

【转】多进程 & 多线程的区别与适用场景

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

Python 多进程 多线程数据共享

#!/usr/bin/env python # -*- coding:utf-8 -*- # author: Changhua Gong from multiprocessing import Process, Queue import os, time, random ''' 1. 我们平时from queue import Queue是线程对列,用于数据共享的,只能在线程之间进行使用: 2. from multiprocessing import Queue,是进程对列,用于进程间数据交换,

Python 多进程多线编程模板

一.Python 多进程多线程原理介绍 1. Python 全局解释器锁GIL a) Python的全局解释器锁GIL是互斥锁,能够防止本机多个线程一次执行Python字节码:由于CPython的内存管理在线程级别是不安全的(内存泄露),所以这个全局解释器锁是必须的.每个Python进程只能申请使用一个GIL锁,因此Python的多线程虽然是并发的但不能并行处理.Python的解释器每次只能执行一个线程,待GIL锁释放后再执行下一个线程,这样线程轮流被执行. b) Python2.x里,GIL的

(转)python多进程、多线程编程

1 概念梳理: 1.1 线程 1.1.1 什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务.一个线程是一个execution context(执行上下文),即一个cpu执行时所需要的一串指令. 1.1.2 线程的工作方式 假设你正在读一本书,没有读完,你想休息一下,但是你想在回来时恢复到当时读的具体进度.有一个方法就是记下页数.行数与字数这三个数值,这

python之多线程与多进程

1. 多进程与多线程 (1)背景:为何需要多进程或者多线程:在同一时间里,同一个计算机系统中如果允许两个或者两个以上的进程处于运行状态,这便是多任务.多任务会带来的好处例如用户边听歌.边上网.边打印,而这些任务之间丝毫不会互相干扰.使用多进程技术,可大大提高计算机的运算速率. (2)多进程与多线程的区别: 进程:程序在计算机上的一次执行活动.进程分为:系统进程和用户进程. 当运行一个程序时,实际就是启动了一个进程.程序是死的(静态的),进程是活的(动态的). 线程:是程序中的一个单一的顺序控制流

python下多线程是鸡肋,推荐使用多进程 代码示例

最近在看Python的多线程,经常我们会听到老手说:“python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢? 要知其然,更要知其所以然.所以有了下面的深入研究: 首先强调背景: 1.GIL是什么?GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定. 2.每个CPU在同一时间只能执行一个线程(在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念.但并发和并行

Python多进程和多线程是鸡肋嘛?【转】

GIL是什么 Python的代码执行由 Python虚拟机(也叫解释器主循环,CPython版本)来控制,Python在设计之初就考虑到在解释器的主循环中,同时只有一个线程在运行.即每个CPU在任意时刻只有一个线程在解释器中运行.对 Python虚拟机访问的控制由全局解释锁GIL控制,正是这个锁来控制同一时刻只有一个线程能够运行.——在单核CPU下的多线程其实都只是并发,不是并行 . 并发与并行区别 并发:两个或多个事件在同一时间间隔发生,或者说交替做不同事件的能力,或者说不同的代码块交替执行.