10 2018 档案
Python并行编程(十四):异步编程
摘要:1、基本概念 除了顺序执行和并行执行的模型以外,还有异步模型,这是事件驱动模型的基础。异步活动的执行模型可以只有一个单一的主控制流,能在单核心系统和多核心系统中运行。 在并发执行的异步模型中,许多任务被穿插在同一时间线上,所有的任务都由一个控制流执行(单一线程)。任务的执行可能被暂停或恢复,中间的这 阅读全文
posted @ 2018-10-23 19:31 杜先生的博客 阅读(1724) 评论(0) 推荐(0) 编辑
Python并行编程(十三):进程池和mpi4py模块
摘要:1、基本概念 多进程库提供了Pool类来实现简单的多进程任务。Pool类有以下方法: - apply():直到得到结果之前一直阻塞。 - apply_async():这是apply()方法的一个变体,返回的是一个result对象。这是一个异步的操作,在所有的子类执行之前不会锁住主进程。 - map( 阅读全文
posted @ 2018-10-22 14:42 杜先生的博客 阅读(6678) 评论(0) 推荐(1) 编辑
Python并行编程(十二):进程同步
摘要:1、基本概念 多个进程可以协同工作来完成一项任务,通常需要共享数据。所以在多进程之间保持数据的一致性就很重要,需要共享数据协同的进程必须以适当的策略来读写数据。同步原语和线程的库类似。 - Lock:一个Lock对象有两个方法acquire和release来控制共享数据的读写权限。 - Event: 阅读全文
posted @ 2018-10-18 15:33 杜先生的博客 阅读(3523) 评论(0) 推荐(0) 编辑
Python并行编程(十一):基于进程的并行
摘要:1、基本概念 多进程主要用multiprocessing和mpi4py这两个模块。 multiprocessing是Python标准库中的模块,实现了共享内存机制,可以让运行在不同处理器核心的进程能读取共享内存。 mpi4py库实现了消息传递的编程范例(设计模式)。简单来说就是进程之间不靠任何共享信 阅读全文
posted @ 2018-10-18 11:12 杜先生的博客 阅读(1579) 评论(0) 推荐(1) 编辑
Python并行编程(十):多线程性能评估
摘要:1、基本概念 GIL是CPython解释器引入的锁,GIL在解释器层面阻止了真正的并行运行。解释器在执行任何线程之前,必须等待当前正在运行的线程释放GIL,事实上,解释器会强迫想要运行的线程必须拿到GIL才能访问解释器的任何资源,例如栈或Python对象等,这也正是GIL的目的,为了阻止不同的线程并 阅读全文
posted @ 2018-10-17 09:38 杜先生的博客 阅读(1952) 评论(0) 推荐(0) 编辑
Python并行编程(九):线程通讯queue
摘要:1、基本概念 当线程之间要共享资源或数据的时候,可能变的非常复杂。Python的threading模块提供了很多同步原语,包括信号量,条件变量,事件和锁。如果可以使用这些原语的话,应该优先考虑使用这些,而不是使用queue模块。队列操作起来更容易,也使多线程编程更安全,因为队列可以将资源的使用通过单 阅读全文
posted @ 2018-10-16 16:44 杜先生的博客 阅读(880) 评论(0) 推荐(0) 编辑
Python并行编程(八):with语法
摘要:1、基本概念 当有两个相关的操作需要在一部分代码块前后分别执行的时候,可以使用with语法自动完成。同时,使用with语法可以在特定的地方分配和释放资源,因此,with语法也叫作"上下文管理器"。在threading模快中,所有带有acquire()方法和release()方法的对象都可以使用上下文 阅读全文
posted @ 2018-10-16 14:58 杜先生的博客 阅读(675) 评论(0) 推荐(0) 编辑
Python并行编程(七):线程同步之事件
摘要:1、基本概念 事件是线程之间用于通讯的对象。有的线程等待信号,有的线程发出信号。基本上事件对象都会维护一个内部变量,可以通过set方法设置为true,也可以通过clear方法设置为false。wait方法将会阻塞线程,直到内部变量为true。 2、使用用例 线程t1在list最后添加值,然后设置ev 阅读全文
posted @ 2018-10-11 18:38 杜先生的博客 阅读(488) 评论(0) 推荐(0) 编辑
Python并行编程(六):线程同步之条件
摘要:1、基本概念 条件指的是应用程序状态的改变。其中某些线程在等待某一条件发生,其 他线程会在该条件发生的时候进行通知,一旦条件发生,线程会拿到共享资源的唯一权限。 2、示例代码 执行结果如下: 阅读全文
posted @ 2018-10-11 17:02 杜先生的博客 阅读(468) 评论(0) 推荐(0) 编辑
Python并行编程(五):线程同步之信号量
摘要:1、基本概念 信号量是由操作系统管理的一种抽象数据类型,用于在多线程中同步对共享资源的使用。本质上说,信号量是一个内部数据,用于标明当前的共享资源可以有多少并发读取。 同样在threading中,信号量有acquire和release两个函数。 - 每当线程想要读取关联了信号量的共享资源时,必须调用 阅读全文
posted @ 2018-10-11 14:28 杜先生的博客 阅读(1988) 评论(0) 推荐(0) 编辑
Python并行编程(四):线程同步之RLock
摘要:1、基本概念 如果想让只有拿到锁的线程才能释放该锁,那么应该使用RLock()对象。当需要在类外面保证线程安全,又要在类内使用同样方法的时候RLock()就很使用。 RLock叫做Reentrant Lock,就是可以重复进入的锁,也叫递归锁。这种锁对比Lock有三个特点:1、谁拿到锁,谁释放;2、 阅读全文
posted @ 2018-10-11 11:01 杜先生的博客 阅读(1099) 评论(0) 推荐(0) 编辑
Python并行编程(三):线程同步之Lock
摘要:1、基础概念 当两个或以上对共享内存操作的并发线程中,如果有一个改变数据,又没有同步机制的条件下,就会产生竞争条件,可能会导致执行无效代码、bug等异常行为。 竞争条件最简单的解决方法是使用锁。锁的操作非常简单,当一个线程需要访问部分共享内存时,它必须先获得锁才能访问。此线程对这部分共享资源使用完成 阅读全文
posted @ 2018-10-10 16:51 杜先生的博客 阅读(869) 评论(0) 推荐(0) 编辑
Python并行编程(二):基于线程的并行
摘要:1、介绍 软件应用中使用最广泛的并行编程范例是多线程。通常一个应用有一个进程,分成多个独立的线程,并行运行、互相配合,执行不同类型的任务。 线程是独立的处理流程,可以和系统的其他线程并行或并发地执行。多线程可以利用共享内存空间共享数据和资源。线程和进程的具体实现取决于你要运行的操作系统,但是总体来讲 阅读全文
posted @ 2018-10-10 11:54 杜先生的博客 阅读(911) 评论(0) 推荐(0) 编辑
Python并行编程(一):基本概念
摘要:1、线程和进程 进程是应用程序的一个执行实例,比如,在桌面上双击浏览器将会运行一个浏览器。线程是一个控制流程,可以在进程内与其他活跃的线程同时执行。控制流程指的是顺序执行一些机器指令。进程可以包含多个线程,所以开启一个浏览器,操作系统将创建一个进程,并开始执行这个进程的主线程。每一个线程将独立执行一 阅读全文
posted @ 2018-10-09 11:35 杜先生的博客 阅读(2655) 评论(0) 推荐(1) 编辑