Skip to content

Instantly share code, notes, and snippets.

@prologic
Created June 18, 2015 14:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save prologic/7bb5bbcecfb79bfdc841 to your computer and use it in GitHub Desktop.
Save prologic/7bb5bbcecfb79bfdc841 to your computer and use it in GitHub Desktop.
Naive implemtnation of Pool/map in circuits
#!/usr/bin/env python
"""Bridge Example
A Bridge example ...
"""
from __future__ import print_function
import sys
from time import sleep
from itertools import repeat
from operator import attrgetter
from circuits import child, Event, Component, Debugger
class main(Event):
"""main Event"""
class isprime(Event):
"""isprime Event"""
class emap(Event):
"""emap Event"""
class Worker(Component):
def isprime(self, x):
sleep(0.1)
if x in [0, 1]:
return False
for n in xrange(2, int(x ** 0.5 + 1)):
if x % n == 0:
return False
return True
getresult = attrgetter("result")
getvalue = attrgetter("value")
class Pool(Component):
def init(self):
self.workers = []
def add(self, worker):
self.workers.append(worker.start(process=True, link=self))
def emap(self, event, e, xs):
vs = []
while xs:
for process, worker in self.workers:
if xs:
vs.append(self.fire(child(e(xs.pop())), worker.channel))
while not all(map(getresult, vs)):
yield
yield map(getvalue, vs)
class App(Component):
def init(self, *args):
Debugger(events=False).register(self)
n = args and int(args[0]) or 2
self.pool = Pool().register(self)
for _ in repeat(None, n):
self.pool.add(Worker())
self.fire(main())
def main(self):
xs = yield self.call(emap(isprime, range(100)))
print(xs)
raise SystemExit(0)
App(*sys.argv[1:]).run()
@prologic
Copy link
Author

Demo:

prologic@daisy
Fri Jun 19 00:30:01 
~/circuits
$ time python test_map.py 2
[False, False, [True, True, True, True, True, True, True], False, False, [False, False], False, False, False, [False, False, False], True, False, False, False, False, False, [True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True], False, False, False, True, [False, False, False, False], False, False, False, False, True, False, [True, True, True, True, True, True, True, True, True], False, [False, False, False, False, False, False], False, True, [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], False, False, False, False, True, False, True, False, False, [False, False, False, False, False, False, False], False, False, True, [False, False, False, False, False, False], False, False, False, False, True, False, False, False, True, [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], True, False, False, False, True, False, False, False, False, False, True, False, True, False, False, False, False, False, True, False, [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], False, True, False, True, False, False, False, True, False, True, False, False, [False, False], True, False, True, False, True, [True, True, True, True, True], False, False]

real    0m6.238s
user    0m0.208s
sys 0m0.029s
(circuits)
prologic@daisy
Fri Jun 19 00:30:53 
~/circuits
$ time python test_map.py 4
[False, False, True, False, False, False, False, False, False, False, True, False, False, False, False, False, True, False, False, False, True, False, [False, False], False, False, False, [True, True, True], False, True, False, False, False, True, False, False, False, False, False, [True, True], False, True, False, False, False, False, False, True, False, False, False, False, False, [True, True], False, False, False, True, False, True, [False, False, False, False, False, False, False], [False, False], False, [True, True], False, False, False, False, False, True, False, True, False, [False, False, False], [False, False, False], False, [False, False], [True, True, True, True, True, True, True, True, True], False, False, False, [True, True], [False, False, False, False, False, False, False, False, False], [True, True, True, True, True, True, True, True, True], False, False, [False, False], [True, True], False, True, False, False, False, True, False, True, False, True, True, False, False]

real    0m3.109s
user    0m0.219s
sys 0m0.028s
(circuits)
prologic@daisy
Fri Jun 19 00:30:59 
~/circuits
$ time python test_map.py 8
[False, False, [True, True, True], False, False, False, False, [False, False, False], False, False, True, False, False, False, False, False, [True, True], False, False, False, True, False, False, False, [False, False], False, True, False, True, False, False, False, True, False, False, False, False, False, [True, True, True], False, True, False, False, False, False, [False, False, False, False, False], True, False, [False, False, False, False, False], False, False, False, True, False, False, False, True, False, True, False, False, False, True, False, False, [False, False, False], False, False, True, False, True, False, False, False, False, [False, False, False], [True, True, True], False, False, False, [True, True], False, True, False, False, [False, False], True, False, True, False, False, False, True, [False, False], True, False, True, True, False, False]

real    0m1.884s
user    0m0.253s
sys 0m0.037s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment