SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
Ancient history
    python-csp: features and idioms
            Using built-in processes
                  Future challenges




python-csp: bringing OCCAM to Python

                            Sarah Mount


                        Europython 2010




                       Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
            python-csp: features and idioms
                    Using built-in processes
                          Future challenges




1 Ancient history

2 python-csp: features and idioms
     Process creation
     Parallel, sequential and repeated processes
     Communication via channel read / writes
     More channels: ALTing and choice
     More channels: poisoning
     Producer / consumer or worker / farmer models

3 Using built-in processes

4 Future challenges



                               Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
                 python-csp: features and idioms
                         Using built-in processes
                               Future challenges




This talk. . .
is all about the python-csp project. There is a similar project
called PyCSP, these will merge over the next few months. Current
code base is here: http://code.google.com/p/python-csp
Please do contribute bug fixes / issues / code / docs / rants / . . .




                                    Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
            python-csp: features and idioms
                    Using built-in processes
                          Future challenges




INMOS B0042 Board c David May
The Transputer was the original “multicore” machine and was built
to run the OCCAM language – a realisation of CSP.
http://www.cs.bris.ac.uk/~dave/transputer.html
                               Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
             python-csp: features and idioms
                     Using built-in processes
                           Future challenges




Tony Hoare
Invented CSP, OCCAM, Quicksort and other baddass stuff. You
may remember him from such talks as his Europython 2009
Keynote.
                                Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
             python-csp: features and idioms
                     Using built-in processes
                           Future challenges




OCCAM



 OCCAM lives on in it’s current implementation as OCCAM-π
 http://www.cs.kent.ac.uk/projects/ofa/kroc/
 It can run on Lego bricks, Arduino boards and other things. Like
 Python it uses indentation to demark scope. Unlike Python
 OCCAM is MOSTLY IN UPPERCASE.




                                Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
                    python-csp: features and idioms
                            Using built-in processes
                                  Future challenges




CSP and message passing
This next bit will be revision for many of you!




                                       Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
             python-csp: features and idioms
                     Using built-in processes
                           Future challenges




Most of us think of programs like this




   http://xkcd.com/205/

                                Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
             python-csp: features and idioms
                     Using built-in processes
                           Future challenges




This is the old “standard” model!



      Multicore will soon take over the world (if it hasn’t already).
      Shared memory concurrency / parallelism is hard:
          Race hazards
          Deadlock
          Livelock
          Tracking which lock goes with which data and what order
          locks should be used.
          Operating Systems are old news!




                                Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
               python-csp: features and idioms
                       Using built-in processes
                             Future challenges




Message passing
   Definition
   In message passing concurrency (or parallelism) “everything” is a
   process and no data is shared between processes. Instead, data is
   “passed” between channels which connect processes together.
   Think: OS processes and UNIX pipes.

       The actor model (similar to Kamaelia) uses asynchronous
       channels. Processes write data to a channel and continue
       execution.
       CSP (and π-calculus) use synchronous channels, or
       rendezvous, where a process writing to a channel has to wait
       until the value has been read by another process before
       proceeding.
                                  Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
           python-csp: features and idioms
                   Using built-in processes
                         Future challenges




Process diagram




                              Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
               python-csp: features and idioms
                       Using built-in processes
                             Future challenges




Why synchronous channels?




   Leslie Lamport (1978). Time, clocks, and the ordering of events in
   a distributed system”. Communications of the ACM 21 (7)

                                  Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                               Ancient history    Parallel, sequential and repeated processes
               python-csp: features and idioms    Communication via channel read / writes
                       Using built-in processes   More channels: ALTing and choice
                             Future challenges    More channels: poisoning
                                                  Producer / consumer or worker / farmer models


Hello World!



      from c s p . c s p p r o c e s s i m p o r t ∗

      @process
      def h e l l o () :
          p r i n t ’ H e l l o CSP w o r l d ! ’

      hello () . start ()




                                  Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                               Ancient history    Parallel, sequential and repeated processes
               python-csp: features and idioms    Communication via channel read / writes
                       Using built-in processes   More channels: ALTing and choice
                             Future challenges    More channels: poisoning
                                                  Producer / consumer or worker / farmer models


Example of process creation: web server

      @process
      def s e r v e r ( host , port ) :
        sock = socket . socket ( . . . )
        # S e t up s o c k e t s
        w h i l e True :
                conn , a d d r = s o c k . a c c e p t ( )
                r e q u e s t = conn . r e c v ( 4 0 9 6 ) . s t r i p ( )
                i f r e q u e s t . s t a r t s w i t h ( ’GET ’ ) :
                       ok ( r e q u e s t , conn ) . s t a r t ( )
                else :
                        n o t f o u n d ( r e q u e s t , conn ) . s t a r t ( )


                                  Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                              Ancient history    Parallel, sequential and repeated processes
              python-csp: features and idioms    Communication via channel read / writes
                      Using built-in processes   More channels: ALTing and choice
                            Future challenges    More channels: poisoning
                                                 Producer / consumer or worker / farmer models


Example of process creation: web server


      @process
      d e f n o t f o u n d ( r e q u e s t , conn ) :
            page = ’<h1>F i l e n o t found </h1> ’
            conn . s e n d ( r e s p o n s e ( 4 0 4 ,
                                               ’ Not Found ’ ,
                                               page ) )
            conn . shutdown ( s o c k e t . SHUT RDWR)
            conn . c l o s e ( )
            return



                                 Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                             Ancient history    Parallel, sequential and repeated processes
             python-csp: features and idioms    Communication via channel read / writes
                     Using built-in processes   More channels: ALTing and choice
                           Future challenges    More channels: poisoning
                                                Producer / consumer or worker / farmer models


Combining processes: in parallel



           # With a Par o b j e c t :
           Par ( p1 , p2 , p3 , . . . pn ) . s t a r t ( )
           # With s y n t a c t i c s u g a r :
           p1 // ( p2 , p3 , . . . pn )
           # RHS must be a s e q u e n c e t y p e .




                                Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                               Ancient history    Parallel, sequential and repeated processes
               python-csp: features and idioms    Communication via channel read / writes
                       Using built-in processes   More channels: ALTing and choice
                             Future challenges    More channels: poisoning
                                                  Producer / consumer or worker / farmer models


Combining processes: repeating a process sequentially



       @process
       def h e l l o () :
           p r i n t ’ H e l l o CSP w o r l d ! ’
       if   name          == ’ m a i n ’ :
           hello () ∗ 3
           2 ∗ hello ()




                                  Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                              Ancient history    Parallel, sequential and repeated processes
              python-csp: features and idioms    Communication via channel read / writes
                      Using built-in processes   More channels: ALTing and choice
                            Future challenges    More channels: poisoning
                                                 Producer / consumer or worker / farmer models


Channels


      @process
      d e f c l i e n t ( chan ) :
            p r i n t chan . r e a d ( )
      @process
      d e f s e r v e r ( chan ) :
            chan . w r i t e ( ’ H e l l o CSP w o r l d ! ’ )

      if     name         == ’ m a i n ’ :
            ch = C h a n n e l ( )
            Par ( c l i e n t ( ch ) , s e r v e r ( ch ) ) . s t a r t ( )


                                 Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                             Ancient history    Parallel, sequential and repeated processes
             python-csp: features and idioms    Communication via channel read / writes
                     Using built-in processes   More channels: ALTing and choice
                           Future challenges    More channels: poisoning
                                                Producer / consumer or worker / farmer models


What you need to know about channels


      Channels are currently UNIX pipes
      This will likely change
      Channel rendezvous is “slow” compared with JCSP:
      200µ s vs 16µ s
      This will be fixed by having channels written in C
      Because channels are, at the OS level, open “files”, there can
      only be a limited number of them (around 300 on my
      machine)
      This makes me sad :-(


                                Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                               Ancient history    Parallel, sequential and repeated processes
               python-csp: features and idioms    Communication via channel read / writes
                       Using built-in processes   More channels: ALTing and choice
                             Future challenges    More channels: poisoning
                                                  Producer / consumer or worker / farmer models


Message passing an responsiveness

       This isn’t about speed.
       Sometimes, you have several channels and reading from them
       all round-robin may reduce responsiveness if one channel read
       blocks for a long time.
   This is BAD:

       @process
       def foo ( channels ) :
           f o r chan i n c h a n n e l s :
                 p r i n t chan . r e a d ( )


                                  Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                               Ancient history    Parallel, sequential and repeated processes
               python-csp: features and idioms    Communication via channel read / writes
                       Using built-in processes   More channels: ALTing and choice
                             Future challenges    More channels: poisoning
                                                  Producer / consumer or worker / farmer models


ALTing and choice

   Definition
   ALTing, or non-deterministic choice, selects a channel to read from
   from those channels which are ready to read from.

   You can do this with (only) two channels:

       @process
       d e f f o o ( c1 , c2 ) :
             p r i n t c1 | c2
             p r i n t c1 | c2



                                  Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                              Ancient history    Parallel, sequential and repeated processes
              python-csp: features and idioms    Communication via channel read / writes
                      Using built-in processes   More channels: ALTing and choice
                            Future challenges    More channels: poisoning
                                                 Producer / consumer or worker / farmer models


ALTing proper (many channels)


      @process
      d e f f o o ( c1 , c2 , c3 , c4 , c5 ) :
            a l t = A l t ( c1 , c2 , c3 , c4 , c5 )
            # Choose random a v a i l a b l e o f f e r
            print alt . se le ct ()
            # Avoid l a s t s e l e c t e d channel
            print alt . f a i r s e l e c t ()
            # Choose c h a n n e l w i t h l o w e s t i n d e x
            print alt . p r i s e l e c t ()



                                 Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                             Ancient history    Parallel, sequential and repeated processes
             python-csp: features and idioms    Communication via channel read / writes
                     Using built-in processes   More channels: ALTing and choice
                           Future challenges    More channels: poisoning
                                                Producer / consumer or worker / farmer models


Syntactic sugar for ALTing


      @process
      d e f f o o ( c1 , c2 , c3 , c4 , c5 ) :
            gen = A l t ( c1 , c2 , c3 , c4 , c5 )
            p r i n t gen . n e x t ( )
            p r i n t gen . n e x t ( )
            p r i n t gen . n e x t ( )
            p r i n t gen . n e x t ( )
            p r i n t gen . n e x t ( )




                                Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                              Ancient history    Parallel, sequential and repeated processes
              python-csp: features and idioms    Communication via channel read / writes
                      Using built-in processes   More channels: ALTing and choice
                            Future challenges    More channels: poisoning
                                                 Producer / consumer or worker / farmer models


ALTing: when you really, really must return right now



       @process
       d e f f o o ( c1 , c2 , c3 ) :
             # Skip () w i l l / always / complete
             # a read immediately
             gen = A l t ( c1 , c2 , c3 , S k i p ( ) )
             p r i n t gen . n e x t ( )
             ...




                                 Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                               Ancient history    Parallel, sequential and repeated processes
               python-csp: features and idioms    Communication via channel read / writes
                       Using built-in processes   More channels: ALTing and choice
                             Future challenges    More channels: poisoning
                                                  Producer / consumer or worker / farmer models


Channel poisoning
   Definition
   Idiomatically in this style of programming most processes contain
   infinite loops. Poisoning a channel asks all processes connected to
   that channel to shut down automatically. Each process which has
   a poisoned channel will automatically poison any other channels it
   is connected to. This way, a whole graph of connected processes
   can be terminated, avoiding race conditions.

       @process
       def foo ( channel ) :
           ...
           channel . poison ()

                                  Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                            Ancient history    Parallel, sequential and repeated processes
            python-csp: features and idioms    Communication via channel read / writes
                    Using built-in processes   More channels: ALTing and choice
                          Future challenges    More channels: poisoning
                                               Producer / consumer or worker / farmer models


A bigger example: Mandelbrot generator




                               Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                         Ancient history    Parallel, sequential and repeated processes
         python-csp: features and idioms    Communication via channel read / writes
                 Using built-in processes   More channels: ALTing and choice
                       Future challenges    More channels: poisoning
                                            Producer / consumer or worker / farmer models




@process
d e f main ( IMSIZE ) :
      channels = [ ]
      # One p r o d u c e r + c h a n n e l f o r e a c h
            image column .
      f o r x i n r a n g e ( IMSIZE [ 0 ] ) :
              c h a n n e l s . append ( C h a n n e l ( ) )
              p r o c e s s e s . append ( m a n d e l b r o t ( x ,
                    . . . channels [ x ]) )
      p r o c e s s e s . i n s e r t ( 0 , consume ( IMSIZE ,
            channels ) )
      mandel = Par ( ∗ p r o c e s s e s )
      mandel . s t a r t ( )


                            Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                      Ancient history    Parallel, sequential and repeated processes
      python-csp: features and idioms    Communication via channel read / writes
              Using built-in processes   More channels: ALTing and choice
                    Future challenges    More channels: poisoning
                                         Producer / consumer or worker / farmer models




@process
def mandelbrot ( xcoord , cout ) :
    # Do some maths h e r e
    cout . w r i t e ( xcoord , column data )




                         Sarah Mount     python-csp: bringing OCCAM to Python
Process creation
                        Ancient history    Parallel, sequential and repeated processes
        python-csp: features and idioms    Communication via channel read / writes
                Using built-in processes   More channels: ALTing and choice
                      Future challenges    More channels: poisoning
                                           Producer / consumer or worker / farmer models




@process
d e f consumer ( c i n s ) :
      # I n i t i a l i s e PyGame . . .
      gen = l e n ( c i n s ) ∗ A l t ( ∗ c i n s )
      f o r i in range ( len ( c i n s ) ) :
            x c o o r d , column = gen . n e x t ( )
            # B l i t t h a t column t o s c r e e n
      f o r e v e n t i n pygame . e v e n t . g e t ( ) :
            i f e v e n t . t y p e == pygame . QUIT :
                    for channel in cins :
                           channel . poison ()
                    pygame . q u i t ( )


                           Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
               python-csp: features and idioms
                       Using built-in processes
                             Future challenges




Oscilloscope




                                  Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
         python-csp: features and idioms
                 Using built-in processes
                       Future challenges




@process
def O s c i ll o s c o p e ( inchan ) :
    # I n i t i a l i s e PyGame
    ydata = [ ]
    w h i l e n o t QUIT :
            y d a t a . append ( i n c h a n . r e a d ( ) )
            y d a t a . pop ( 0 )
           # B l i t data to s c r e e n . . .
    # Deal with e v e n t s




                            Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
         python-csp: features and idioms
                 Using built-in processes
                       Future challenges




from c s p . b u i l t i n s i m p o r t S i n
def t r a c e s i n () :
    chans = Channel ( ) , Channel ( )
    Par ( G e n e r a t e F l o a t s ( c h a n s [ 0 ] ) ,
            Sin ( chans [ 0 ] , chans [ 1 ] ) ,
            O s c i l l o s c o p e ( chans [ 1 ] ) ) . s t a r t ()
    return




                            Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
           python-csp: features and idioms
                   Using built-in processes
                         Future challenges




Process diagram




                              Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
        python-csp: features and idioms
                Using built-in processes
                      Future challenges




def trace mux () :
    chans = [ Channel ( ) f o r i i n range (6) ]
    p a r = Par ( G e n e r a t e F l o a t s ( c h a n s [ 0 ] ) ,
                     Delta2 ( chans [ 0 ] , chans [ 1 ] ,
                                    chans [ 2 ] ) ,
                     Cos ( c h a n s [ 1 ] , c h a n s [ 3 ] ) ,
                     Sin ( chans [ 2 ] , chans [ 4 ] ) ,
                     Mux2 ( c h a n s [ 3 ] , c h a n s [ 4 ] ,
                               chans [ 5 ] ) ,
                     O s c i l l o s c o p e ( chans [ 5 ] ) )
    par . s t a r t ()



                           Sarah Mount     python-csp: bringing OCCAM to Python
Ancient history
         python-csp: features and idioms
                 Using built-in processes
                       Future challenges




Wiring




                            Sarah Mount     python-csp: bringing OCCAM to Python

Contenu connexe

Tendances

USENIX Vault'19: Performance analysis in Linux storage stack with BPF
USENIX Vault'19: Performance analysis in Linux storage stack with BPFUSENIX Vault'19: Performance analysis in Linux storage stack with BPF
USENIX Vault'19: Performance analysis in Linux storage stack with BPFTaeung Song
 
carrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIcarrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIYoni Davidson
 
Kalman Graffi - IEEE HPCS 2013 - Comparative Evaluation of P2P Systems Using ...
Kalman Graffi - IEEE HPCS 2013 - Comparative Evaluation of P2P Systems Using ...Kalman Graffi - IEEE HPCS 2013 - Comparative Evaluation of P2P Systems Using ...
Kalman Graffi - IEEE HPCS 2013 - Comparative Evaluation of P2P Systems Using ...Kalman Graffi
 
Plane Spotting
Plane SpottingPlane Spotting
Plane SpottingTed Coyle
 
Jvm tuning in a rush! - Lviv JUG
Jvm tuning in a rush! - Lviv JUGJvm tuning in a rush! - Lviv JUG
Jvm tuning in a rush! - Lviv JUGTomek Borek
 

Tendances (7)

Lp seminar
Lp seminarLp seminar
Lp seminar
 
USENIX Vault'19: Performance analysis in Linux storage stack with BPF
USENIX Vault'19: Performance analysis in Linux storage stack with BPFUSENIX Vault'19: Performance analysis in Linux storage stack with BPF
USENIX Vault'19: Performance analysis in Linux storage stack with BPF
 
carrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIcarrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-API
 
Kalman Graffi - IEEE HPCS 2013 - Comparative Evaluation of P2P Systems Using ...
Kalman Graffi - IEEE HPCS 2013 - Comparative Evaluation of P2P Systems Using ...Kalman Graffi - IEEE HPCS 2013 - Comparative Evaluation of P2P Systems Using ...
Kalman Graffi - IEEE HPCS 2013 - Comparative Evaluation of P2P Systems Using ...
 
PyPy London Demo Evening 2013
PyPy London Demo Evening 2013PyPy London Demo Evening 2013
PyPy London Demo Evening 2013
 
Plane Spotting
Plane SpottingPlane Spotting
Plane Spotting
 
Jvm tuning in a rush! - Lviv JUG
Jvm tuning in a rush! - Lviv JUGJvm tuning in a rush! - Lviv JUG
Jvm tuning in a rush! - Lviv JUG
 

Similaire à python-csp: bringing OCCAM to Python

Message-passing concurrency in Python
Message-passing concurrency in PythonMessage-passing concurrency in Python
Message-passing concurrency in PythonSarah Mount
 
All Day DevOps - FLiP Stack for Cloud Data Lakes
All Day DevOps - FLiP Stack for Cloud Data LakesAll Day DevOps - FLiP Stack for Cloud Data Lakes
All Day DevOps - FLiP Stack for Cloud Data LakesTimothy Spann
 
Streaming 101: Hello World
Streaming 101:  Hello WorldStreaming 101:  Hello World
Streaming 101: Hello WorldJosh Fischer
 
OSS EU: Deep Dive into Building Streaming Applications with Apache Pulsar
OSS EU:  Deep Dive into Building Streaming Applications with Apache PulsarOSS EU:  Deep Dive into Building Streaming Applications with Apache Pulsar
OSS EU: Deep Dive into Building Streaming Applications with Apache PulsarTimothy Spann
 
Deep Dive into Building Streaming Applications with Apache Pulsar
Deep Dive into Building Streaming Applications with Apache Pulsar Deep Dive into Building Streaming Applications with Apache Pulsar
Deep Dive into Building Streaming Applications with Apache Pulsar Timothy Spann
 
Streaming Machine Learning with Python, Jupyter, TensorFlow, Apache Kafka and...
Streaming Machine Learning with Python, Jupyter, TensorFlow, Apache Kafka and...Streaming Machine Learning with Python, Jupyter, TensorFlow, Apache Kafka and...
Streaming Machine Learning with Python, Jupyter, TensorFlow, Apache Kafka and...Kai Wähner
 
Pcapy and dpkt - tcpdump on steroids - Ran Leibman - DevOpsDays Tel Aviv 2018
Pcapy and dpkt - tcpdump on steroids - Ran Leibman - DevOpsDays Tel Aviv 2018Pcapy and dpkt - tcpdump on steroids - Ran Leibman - DevOpsDays Tel Aviv 2018
Pcapy and dpkt - tcpdump on steroids - Ran Leibman - DevOpsDays Tel Aviv 2018DevOpsDays Tel Aviv
 
What’s Slowing Down Your Kafka Pipeline? With Ruizhe Cheng and Pete Stevenson...
What’s Slowing Down Your Kafka Pipeline? With Ruizhe Cheng and Pete Stevenson...What’s Slowing Down Your Kafka Pipeline? With Ruizhe Cheng and Pete Stevenson...
What’s Slowing Down Your Kafka Pipeline? With Ruizhe Cheng and Pete Stevenson...HostedbyConfluent
 
Introduction to Apache Beam & No Shard Left Behind: APIs for Massive Parallel...
Introduction to Apache Beam & No Shard Left Behind: APIs for Massive Parallel...Introduction to Apache Beam & No Shard Left Behind: APIs for Massive Parallel...
Introduction to Apache Beam & No Shard Left Behind: APIs for Massive Parallel...Dan Halperin
 
Python Streaming Pipelines on Flink - Beam Meetup at Lyft 2019
Python Streaming Pipelines on Flink - Beam Meetup at Lyft 2019Python Streaming Pipelines on Flink - Beam Meetup at Lyft 2019
Python Streaming Pipelines on Flink - Beam Meetup at Lyft 2019Thomas Weise
 
H2O World - What's New in H2O with Cliff Click
H2O World - What's New in H2O with Cliff ClickH2O World - What's New in H2O with Cliff Click
H2O World - What's New in H2O with Cliff ClickSri Ambati
 
Traitement temps réel chez Streamroot - Golang Paris Juin 2016
Traitement temps réel chez Streamroot - Golang Paris Juin 2016Traitement temps réel chez Streamroot - Golang Paris Juin 2016
Traitement temps réel chez Streamroot - Golang Paris Juin 2016Simon Caplette
 
UCX-Python - A Flexible Communication Library for Python Applications
UCX-Python - A Flexible Communication Library for Python ApplicationsUCX-Python - A Flexible Communication Library for Python Applications
UCX-Python - A Flexible Communication Library for Python ApplicationsMatthew Rocklin
 
3.2 Streaming and Messaging
3.2 Streaming and Messaging3.2 Streaming and Messaging
3.2 Streaming and Messaging振东 刘
 
BigDataFest Building Modern Data Streaming Apps
BigDataFest  Building Modern Data Streaming AppsBigDataFest  Building Modern Data Streaming Apps
BigDataFest Building Modern Data Streaming Appsssuser73434e
 
Euro python2011 High Performance Python
Euro python2011 High Performance PythonEuro python2011 High Performance Python
Euro python2011 High Performance PythonIan Ozsvald
 
How to integrate python into a scala stack
How to integrate python into a scala stackHow to integrate python into a scala stack
How to integrate python into a scala stackFliptop
 
ApacheCon2022_Deep Dive into Building Streaming Applications with Apache Pulsar
ApacheCon2022_Deep Dive into Building Streaming Applications with Apache PulsarApacheCon2022_Deep Dive into Building Streaming Applications with Apache Pulsar
ApacheCon2022_Deep Dive into Building Streaming Applications with Apache PulsarTimothy Spann
 
Conf42 Python_ ML Enhanced Event Streaming Apps with Python Microservices
Conf42 Python_ ML Enhanced Event Streaming Apps with Python MicroservicesConf42 Python_ ML Enhanced Event Streaming Apps with Python Microservices
Conf42 Python_ ML Enhanced Event Streaming Apps with Python MicroservicesTimothy Spann
 

Similaire à python-csp: bringing OCCAM to Python (20)

Message-passing concurrency in Python
Message-passing concurrency in PythonMessage-passing concurrency in Python
Message-passing concurrency in Python
 
All Day DevOps - FLiP Stack for Cloud Data Lakes
All Day DevOps - FLiP Stack for Cloud Data LakesAll Day DevOps - FLiP Stack for Cloud Data Lakes
All Day DevOps - FLiP Stack for Cloud Data Lakes
 
Numba lightning
Numba lightningNumba lightning
Numba lightning
 
Streaming 101: Hello World
Streaming 101:  Hello WorldStreaming 101:  Hello World
Streaming 101: Hello World
 
OSS EU: Deep Dive into Building Streaming Applications with Apache Pulsar
OSS EU:  Deep Dive into Building Streaming Applications with Apache PulsarOSS EU:  Deep Dive into Building Streaming Applications with Apache Pulsar
OSS EU: Deep Dive into Building Streaming Applications with Apache Pulsar
 
Deep Dive into Building Streaming Applications with Apache Pulsar
Deep Dive into Building Streaming Applications with Apache Pulsar Deep Dive into Building Streaming Applications with Apache Pulsar
Deep Dive into Building Streaming Applications with Apache Pulsar
 
Streaming Machine Learning with Python, Jupyter, TensorFlow, Apache Kafka and...
Streaming Machine Learning with Python, Jupyter, TensorFlow, Apache Kafka and...Streaming Machine Learning with Python, Jupyter, TensorFlow, Apache Kafka and...
Streaming Machine Learning with Python, Jupyter, TensorFlow, Apache Kafka and...
 
Pcapy and dpkt - tcpdump on steroids - Ran Leibman - DevOpsDays Tel Aviv 2018
Pcapy and dpkt - tcpdump on steroids - Ran Leibman - DevOpsDays Tel Aviv 2018Pcapy and dpkt - tcpdump on steroids - Ran Leibman - DevOpsDays Tel Aviv 2018
Pcapy and dpkt - tcpdump on steroids - Ran Leibman - DevOpsDays Tel Aviv 2018
 
What’s Slowing Down Your Kafka Pipeline? With Ruizhe Cheng and Pete Stevenson...
What’s Slowing Down Your Kafka Pipeline? With Ruizhe Cheng and Pete Stevenson...What’s Slowing Down Your Kafka Pipeline? With Ruizhe Cheng and Pete Stevenson...
What’s Slowing Down Your Kafka Pipeline? With Ruizhe Cheng and Pete Stevenson...
 
Introduction to Apache Beam & No Shard Left Behind: APIs for Massive Parallel...
Introduction to Apache Beam & No Shard Left Behind: APIs for Massive Parallel...Introduction to Apache Beam & No Shard Left Behind: APIs for Massive Parallel...
Introduction to Apache Beam & No Shard Left Behind: APIs for Massive Parallel...
 
Python Streaming Pipelines on Flink - Beam Meetup at Lyft 2019
Python Streaming Pipelines on Flink - Beam Meetup at Lyft 2019Python Streaming Pipelines on Flink - Beam Meetup at Lyft 2019
Python Streaming Pipelines on Flink - Beam Meetup at Lyft 2019
 
H2O World - What's New in H2O with Cliff Click
H2O World - What's New in H2O with Cliff ClickH2O World - What's New in H2O with Cliff Click
H2O World - What's New in H2O with Cliff Click
 
Traitement temps réel chez Streamroot - Golang Paris Juin 2016
Traitement temps réel chez Streamroot - Golang Paris Juin 2016Traitement temps réel chez Streamroot - Golang Paris Juin 2016
Traitement temps réel chez Streamroot - Golang Paris Juin 2016
 
UCX-Python - A Flexible Communication Library for Python Applications
UCX-Python - A Flexible Communication Library for Python ApplicationsUCX-Python - A Flexible Communication Library for Python Applications
UCX-Python - A Flexible Communication Library for Python Applications
 
3.2 Streaming and Messaging
3.2 Streaming and Messaging3.2 Streaming and Messaging
3.2 Streaming and Messaging
 
BigDataFest Building Modern Data Streaming Apps
BigDataFest  Building Modern Data Streaming AppsBigDataFest  Building Modern Data Streaming Apps
BigDataFest Building Modern Data Streaming Apps
 
Euro python2011 High Performance Python
Euro python2011 High Performance PythonEuro python2011 High Performance Python
Euro python2011 High Performance Python
 
How to integrate python into a scala stack
How to integrate python into a scala stackHow to integrate python into a scala stack
How to integrate python into a scala stack
 
ApacheCon2022_Deep Dive into Building Streaming Applications with Apache Pulsar
ApacheCon2022_Deep Dive into Building Streaming Applications with Apache PulsarApacheCon2022_Deep Dive into Building Streaming Applications with Apache Pulsar
ApacheCon2022_Deep Dive into Building Streaming Applications with Apache Pulsar
 
Conf42 Python_ ML Enhanced Event Streaming Apps with Python Microservices
Conf42 Python_ ML Enhanced Event Streaming Apps with Python MicroservicesConf42 Python_ ML Enhanced Event Streaming Apps with Python Microservices
Conf42 Python_ ML Enhanced Event Streaming Apps with Python Microservices
 

Plus de Sarah Mount

Revelation pyconuk2016
Revelation pyconuk2016Revelation pyconuk2016
Revelation pyconuk2016Sarah Mount
 
Jatrobot - real-time farm monitoring
Jatrobot - real-time farm monitoringJatrobot - real-time farm monitoring
Jatrobot - real-time farm monitoringSarah Mount
 
Scala - just good for Java shops?
Scala - just good for Java shops?Scala - just good for Java shops?
Scala - just good for Java shops?Sarah Mount
 
Mining python-software-pyconuk13
Mining python-software-pyconuk13Mining python-software-pyconuk13
Mining python-software-pyconuk13Sarah Mount
 
Marvin the paranoid laptop by his owner snim2
Marvin the paranoid laptop by his owner snim2Marvin the paranoid laptop by his owner snim2
Marvin the paranoid laptop by his owner snim2Sarah Mount
 
Europython lightening talk_on_open_ihm
Europython lightening talk_on_open_ihmEuropython lightening talk_on_open_ihm
Europython lightening talk_on_open_ihmSarah Mount
 

Plus de Sarah Mount (6)

Revelation pyconuk2016
Revelation pyconuk2016Revelation pyconuk2016
Revelation pyconuk2016
 
Jatrobot - real-time farm monitoring
Jatrobot - real-time farm monitoringJatrobot - real-time farm monitoring
Jatrobot - real-time farm monitoring
 
Scala - just good for Java shops?
Scala - just good for Java shops?Scala - just good for Java shops?
Scala - just good for Java shops?
 
Mining python-software-pyconuk13
Mining python-software-pyconuk13Mining python-software-pyconuk13
Mining python-software-pyconuk13
 
Marvin the paranoid laptop by his owner snim2
Marvin the paranoid laptop by his owner snim2Marvin the paranoid laptop by his owner snim2
Marvin the paranoid laptop by his owner snim2
 
Europython lightening talk_on_open_ihm
Europython lightening talk_on_open_ihmEuropython lightening talk_on_open_ihm
Europython lightening talk_on_open_ihm
 

Dernier

Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 

Dernier (20)

Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 

python-csp: bringing OCCAM to Python

  • 1. Ancient history python-csp: features and idioms Using built-in processes Future challenges python-csp: bringing OCCAM to Python Sarah Mount Europython 2010 Sarah Mount python-csp: bringing OCCAM to Python
  • 2. Ancient history python-csp: features and idioms Using built-in processes Future challenges 1 Ancient history 2 python-csp: features and idioms Process creation Parallel, sequential and repeated processes Communication via channel read / writes More channels: ALTing and choice More channels: poisoning Producer / consumer or worker / farmer models 3 Using built-in processes 4 Future challenges Sarah Mount python-csp: bringing OCCAM to Python
  • 3. Ancient history python-csp: features and idioms Using built-in processes Future challenges This talk. . . is all about the python-csp project. There is a similar project called PyCSP, these will merge over the next few months. Current code base is here: http://code.google.com/p/python-csp Please do contribute bug fixes / issues / code / docs / rants / . . . Sarah Mount python-csp: bringing OCCAM to Python
  • 4. Ancient history python-csp: features and idioms Using built-in processes Future challenges INMOS B0042 Board c David May The Transputer was the original “multicore” machine and was built to run the OCCAM language – a realisation of CSP. http://www.cs.bris.ac.uk/~dave/transputer.html Sarah Mount python-csp: bringing OCCAM to Python
  • 5. Ancient history python-csp: features and idioms Using built-in processes Future challenges Tony Hoare Invented CSP, OCCAM, Quicksort and other baddass stuff. You may remember him from such talks as his Europython 2009 Keynote. Sarah Mount python-csp: bringing OCCAM to Python
  • 6. Ancient history python-csp: features and idioms Using built-in processes Future challenges OCCAM OCCAM lives on in it’s current implementation as OCCAM-π http://www.cs.kent.ac.uk/projects/ofa/kroc/ It can run on Lego bricks, Arduino boards and other things. Like Python it uses indentation to demark scope. Unlike Python OCCAM is MOSTLY IN UPPERCASE. Sarah Mount python-csp: bringing OCCAM to Python
  • 7. Ancient history python-csp: features and idioms Using built-in processes Future challenges CSP and message passing This next bit will be revision for many of you! Sarah Mount python-csp: bringing OCCAM to Python
  • 8. Ancient history python-csp: features and idioms Using built-in processes Future challenges Most of us think of programs like this http://xkcd.com/205/ Sarah Mount python-csp: bringing OCCAM to Python
  • 9. Ancient history python-csp: features and idioms Using built-in processes Future challenges This is the old “standard” model! Multicore will soon take over the world (if it hasn’t already). Shared memory concurrency / parallelism is hard: Race hazards Deadlock Livelock Tracking which lock goes with which data and what order locks should be used. Operating Systems are old news! Sarah Mount python-csp: bringing OCCAM to Python
  • 10. Ancient history python-csp: features and idioms Using built-in processes Future challenges Message passing Definition In message passing concurrency (or parallelism) “everything” is a process and no data is shared between processes. Instead, data is “passed” between channels which connect processes together. Think: OS processes and UNIX pipes. The actor model (similar to Kamaelia) uses asynchronous channels. Processes write data to a channel and continue execution. CSP (and π-calculus) use synchronous channels, or rendezvous, where a process writing to a channel has to wait until the value has been read by another process before proceeding. Sarah Mount python-csp: bringing OCCAM to Python
  • 11. Ancient history python-csp: features and idioms Using built-in processes Future challenges Process diagram Sarah Mount python-csp: bringing OCCAM to Python
  • 12. Ancient history python-csp: features and idioms Using built-in processes Future challenges Why synchronous channels? Leslie Lamport (1978). Time, clocks, and the ordering of events in a distributed system”. Communications of the ACM 21 (7) Sarah Mount python-csp: bringing OCCAM to Python
  • 13. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models Hello World! from c s p . c s p p r o c e s s i m p o r t ∗ @process def h e l l o () : p r i n t ’ H e l l o CSP w o r l d ! ’ hello () . start () Sarah Mount python-csp: bringing OCCAM to Python
  • 14. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models Example of process creation: web server @process def s e r v e r ( host , port ) : sock = socket . socket ( . . . ) # S e t up s o c k e t s w h i l e True : conn , a d d r = s o c k . a c c e p t ( ) r e q u e s t = conn . r e c v ( 4 0 9 6 ) . s t r i p ( ) i f r e q u e s t . s t a r t s w i t h ( ’GET ’ ) : ok ( r e q u e s t , conn ) . s t a r t ( ) else : n o t f o u n d ( r e q u e s t , conn ) . s t a r t ( ) Sarah Mount python-csp: bringing OCCAM to Python
  • 15. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models Example of process creation: web server @process d e f n o t f o u n d ( r e q u e s t , conn ) : page = ’<h1>F i l e n o t found </h1> ’ conn . s e n d ( r e s p o n s e ( 4 0 4 , ’ Not Found ’ , page ) ) conn . shutdown ( s o c k e t . SHUT RDWR) conn . c l o s e ( ) return Sarah Mount python-csp: bringing OCCAM to Python
  • 16. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models Combining processes: in parallel # With a Par o b j e c t : Par ( p1 , p2 , p3 , . . . pn ) . s t a r t ( ) # With s y n t a c t i c s u g a r : p1 // ( p2 , p3 , . . . pn ) # RHS must be a s e q u e n c e t y p e . Sarah Mount python-csp: bringing OCCAM to Python
  • 17. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models Combining processes: repeating a process sequentially @process def h e l l o () : p r i n t ’ H e l l o CSP w o r l d ! ’ if name == ’ m a i n ’ : hello () ∗ 3 2 ∗ hello () Sarah Mount python-csp: bringing OCCAM to Python
  • 18. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models Channels @process d e f c l i e n t ( chan ) : p r i n t chan . r e a d ( ) @process d e f s e r v e r ( chan ) : chan . w r i t e ( ’ H e l l o CSP w o r l d ! ’ ) if name == ’ m a i n ’ : ch = C h a n n e l ( ) Par ( c l i e n t ( ch ) , s e r v e r ( ch ) ) . s t a r t ( ) Sarah Mount python-csp: bringing OCCAM to Python
  • 19. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models What you need to know about channels Channels are currently UNIX pipes This will likely change Channel rendezvous is “slow” compared with JCSP: 200µ s vs 16µ s This will be fixed by having channels written in C Because channels are, at the OS level, open “files”, there can only be a limited number of them (around 300 on my machine) This makes me sad :-( Sarah Mount python-csp: bringing OCCAM to Python
  • 20. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models Message passing an responsiveness This isn’t about speed. Sometimes, you have several channels and reading from them all round-robin may reduce responsiveness if one channel read blocks for a long time. This is BAD: @process def foo ( channels ) : f o r chan i n c h a n n e l s : p r i n t chan . r e a d ( ) Sarah Mount python-csp: bringing OCCAM to Python
  • 21. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models ALTing and choice Definition ALTing, or non-deterministic choice, selects a channel to read from from those channels which are ready to read from. You can do this with (only) two channels: @process d e f f o o ( c1 , c2 ) : p r i n t c1 | c2 p r i n t c1 | c2 Sarah Mount python-csp: bringing OCCAM to Python
  • 22. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models ALTing proper (many channels) @process d e f f o o ( c1 , c2 , c3 , c4 , c5 ) : a l t = A l t ( c1 , c2 , c3 , c4 , c5 ) # Choose random a v a i l a b l e o f f e r print alt . se le ct () # Avoid l a s t s e l e c t e d channel print alt . f a i r s e l e c t () # Choose c h a n n e l w i t h l o w e s t i n d e x print alt . p r i s e l e c t () Sarah Mount python-csp: bringing OCCAM to Python
  • 23. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models Syntactic sugar for ALTing @process d e f f o o ( c1 , c2 , c3 , c4 , c5 ) : gen = A l t ( c1 , c2 , c3 , c4 , c5 ) p r i n t gen . n e x t ( ) p r i n t gen . n e x t ( ) p r i n t gen . n e x t ( ) p r i n t gen . n e x t ( ) p r i n t gen . n e x t ( ) Sarah Mount python-csp: bringing OCCAM to Python
  • 24. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models ALTing: when you really, really must return right now @process d e f f o o ( c1 , c2 , c3 ) : # Skip () w i l l / always / complete # a read immediately gen = A l t ( c1 , c2 , c3 , S k i p ( ) ) p r i n t gen . n e x t ( ) ... Sarah Mount python-csp: bringing OCCAM to Python
  • 25. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models Channel poisoning Definition Idiomatically in this style of programming most processes contain infinite loops. Poisoning a channel asks all processes connected to that channel to shut down automatically. Each process which has a poisoned channel will automatically poison any other channels it is connected to. This way, a whole graph of connected processes can be terminated, avoiding race conditions. @process def foo ( channel ) : ... channel . poison () Sarah Mount python-csp: bringing OCCAM to Python
  • 26. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models A bigger example: Mandelbrot generator Sarah Mount python-csp: bringing OCCAM to Python
  • 27. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models @process d e f main ( IMSIZE ) : channels = [ ] # One p r o d u c e r + c h a n n e l f o r e a c h image column . f o r x i n r a n g e ( IMSIZE [ 0 ] ) : c h a n n e l s . append ( C h a n n e l ( ) ) p r o c e s s e s . append ( m a n d e l b r o t ( x , . . . channels [ x ]) ) p r o c e s s e s . i n s e r t ( 0 , consume ( IMSIZE , channels ) ) mandel = Par ( ∗ p r o c e s s e s ) mandel . s t a r t ( ) Sarah Mount python-csp: bringing OCCAM to Python
  • 28. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models @process def mandelbrot ( xcoord , cout ) : # Do some maths h e r e cout . w r i t e ( xcoord , column data ) Sarah Mount python-csp: bringing OCCAM to Python
  • 29. Process creation Ancient history Parallel, sequential and repeated processes python-csp: features and idioms Communication via channel read / writes Using built-in processes More channels: ALTing and choice Future challenges More channels: poisoning Producer / consumer or worker / farmer models @process d e f consumer ( c i n s ) : # I n i t i a l i s e PyGame . . . gen = l e n ( c i n s ) ∗ A l t ( ∗ c i n s ) f o r i in range ( len ( c i n s ) ) : x c o o r d , column = gen . n e x t ( ) # B l i t t h a t column t o s c r e e n f o r e v e n t i n pygame . e v e n t . g e t ( ) : i f e v e n t . t y p e == pygame . QUIT : for channel in cins : channel . poison () pygame . q u i t ( ) Sarah Mount python-csp: bringing OCCAM to Python
  • 30. Ancient history python-csp: features and idioms Using built-in processes Future challenges Oscilloscope Sarah Mount python-csp: bringing OCCAM to Python
  • 31. Ancient history python-csp: features and idioms Using built-in processes Future challenges @process def O s c i ll o s c o p e ( inchan ) : # I n i t i a l i s e PyGame ydata = [ ] w h i l e n o t QUIT : y d a t a . append ( i n c h a n . r e a d ( ) ) y d a t a . pop ( 0 ) # B l i t data to s c r e e n . . . # Deal with e v e n t s Sarah Mount python-csp: bringing OCCAM to Python
  • 32. Ancient history python-csp: features and idioms Using built-in processes Future challenges from c s p . b u i l t i n s i m p o r t S i n def t r a c e s i n () : chans = Channel ( ) , Channel ( ) Par ( G e n e r a t e F l o a t s ( c h a n s [ 0 ] ) , Sin ( chans [ 0 ] , chans [ 1 ] ) , O s c i l l o s c o p e ( chans [ 1 ] ) ) . s t a r t () return Sarah Mount python-csp: bringing OCCAM to Python
  • 33. Ancient history python-csp: features and idioms Using built-in processes Future challenges Process diagram Sarah Mount python-csp: bringing OCCAM to Python
  • 34. Ancient history python-csp: features and idioms Using built-in processes Future challenges def trace mux () : chans = [ Channel ( ) f o r i i n range (6) ] p a r = Par ( G e n e r a t e F l o a t s ( c h a n s [ 0 ] ) , Delta2 ( chans [ 0 ] , chans [ 1 ] , chans [ 2 ] ) , Cos ( c h a n s [ 1 ] , c h a n s [ 3 ] ) , Sin ( chans [ 2 ] , chans [ 4 ] ) , Mux2 ( c h a n s [ 3 ] , c h a n s [ 4 ] , chans [ 5 ] ) , O s c i l l o s c o p e ( chans [ 5 ] ) ) par . s t a r t () Sarah Mount python-csp: bringing OCCAM to Python
  • 35. Ancient history python-csp: features and idioms Using built-in processes Future challenges Wiring Sarah Mount python-csp: bringing OCCAM to Python