[Python-Dev] Cloning threading.py using proccesses

Audun Ostrem Nordal Audun.Ostrem.Nordal at cern.ch
Tue Oct 10 16:28:31 CEST 2006


You may already know about a similar project a friend of mine (hi,
Steffen!) did a few years ago called Python Object Sharing (POSH).  This
was however unix specific and relied on fork and SYSV IPC iirc.  I see
he has a SF projectpage here:

http://poshmodule.sourceforge.net/

(doesn't seem to be a lot of activity there, though).

Best regards

__ 
Audun Ostrem Nordal     tel: +41.22.76.74427
CERN IT/IS
1211 Geneve 23
Switzerland 

> -----Original Message-----
> From: python-dev-bounces+audun=cern.ch at python.org 
> [mailto:python-dev-bounces+audun=cern.ch at python.org] On 
> Behalf Of Richard Oudkerk
> Sent: Monday, October 09, 2006 1:59 PM
> To: python-dev at python.org
> Subject: [Python-Dev] Cloning threading.py using proccesses
> 
> I am not sure how sensible the idea is, but I have had a 
> first stab at writing a module processing.py which is a near 
> clone of threading.py but uses processes and sockets for 
> communication.  (It is one way of avoiding the GIL.)
> 
> I have tested it on unix and windows and it seem to work pretty well.
> (Getting round the lack of os.fork on windows is a bit 
> awkward.) There is also another module dummy_processing.py 
> which has the same api but is just a wrapper round threading.py.
> 
> Queues, Locks, RLocks, Conditions, Semaphores and some other 
> shared objects are implemented.
> 
> People are welcome to try out the tests in test_processing.py 
> contained in the zipfile.  More information is included in 
> the README file.
> 
> As a quick example, the code
> 
> .   from processing import Process, Queue, ObjectManager
> .
> .   def f(token):
> .       q = proxy(token)
> .       for i in range(10):
> .           q.put(i*i)
> .       q.put('STOP')
> .
> .   if __name__ == '__main__':
> .       manager = ObjectManager()
> .       token = manager.new(Queue)
> .       queue = proxy(token)
> .
> .       t = Process(target=f, args=[token])
> .       t.start()
> .
> .       result = None
> .       while result != 'STOP':
> .           result = queue.get()
> .           print result
> .
> .       t.join()
> 
> is not very different from the normal threaded equivalent
> 
> .   from threading import Thread
> .   from Queue import Queue
> .
> .   def f(q):
> .       for i in range(10):
> .           q.put(i*i)
> .       q.put('STOP')
> .
> .   if __name__ == '__main__':
> .       queue = Queue()
> .
> .       t = Thread(target=f, args=[queue])
> .       t.start()
> .
> .       result = None
> .       while result != 'STOP':
> .           result = queue.get()
> .           print result
> .
> .       t.join()
> 
> Richard
> 


More information about the Python-Dev mailing list