Python并行编程

 主页   资讯   文章   代码   电子书 

PyCSP和通信顺序进程

PyCSP 是基于通信顺序进程的一个 Python 模块。通信顺序进程是通过消息处理建立并发程序的编程范式。PyCSP 模块的特点是:

  • 进程之间交换消息
  • 线程之间可以共享内存
  • 通过 channels 来实现交换消息

Channels 可以做: - 进程之间传值 - 进程同步

PyCSP 允许多种不同的 channel 类型: One2One, One2Any, Any2One, Any2Any. 这些名字代表多少 readers 和 writers 可以额通过 channel 通讯。

准备工作

(译者注:本文使用的 python-csp 已经发生了比较大的变化, 文中的代码可能已经无法运行)

PyCSP 可以通过 pip 用以下命令安装: :

pip install python-csp

Github 也有库的源码: https://github.com/futurecore/python-csp .

下载之后在项目目录执行以下命令来安装: :

python setup.py install

在本例子中,我们使用 Python2.7 .

如何做

在第一个例子中,我们会先介绍 PyCSP 中的基本概念,processes 和 channels. 我们将定义两个进程,分别是 counter 和 printer. 下面我们来看如何定义这两个进程之间的通信过程。

参考下面的代码: :

# -*- coding: utf-8 -*-
from pycsp.parallel import *

@process
def processCounter(cout, limit):
    for i in xrange(limit):
        cout(i)
    poison(cout)

@process
def processPrinter(cin):
    while True:
        print cin(),

A = Channel('A')

Parallel(
    processCounter(A.writer(), limit=5),
    processPrinter(A.reader())
)

shutdown()

在 Python2.7 中的运行结果如下: :

Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information. 
>>> ========================RESTART ==========================
>>> 
0 1 2 3 4

讨论

// TODO

了解更多

CSP是一种用于描述并发进程交互的语言。在数学中被称为代数过程。它在实践中被用作规范和验证各种系统的竞争条件的工具。 CSP启发的编程语言Occam的现在被广泛用作并行编程语言。

对 CSP 有兴趣的同学,建议阅读霍尔的原著: http://www.usingcsp.com/cspbook.pdf .