Esempio n. 1
0
 def __init__(self):
     reader, writer = Pipe(duplex=False)
     if sys.platform == 'win32':
         state = reader, writer, Lock(), None
     else:
         state = reader, writer, Lock(), Lock()
     self.__setstate__(state)
Esempio n. 2
0
def execInSandbox(fun, *args, **kwargs):
    from processing import Pipe, Process, Condition
    (r, w) = Pipe()

    # bind worker to the 'write' side of the pipe, and to 'fun'
    def worker(*args, **kwargs):
        # TODO: catch errors, and signal parent about them...
        try:
            w.send(fun(*args, **kwargs))
        except Exception, e:
            w.send(e)
Esempio n. 3
0
 def __init__(self):
     self.update = True
     self.gladefile = 'election.glade'
     self.wTree = gtk.glade.XML(self.gladefile, 'mainWindow')
     
     self.wTree.signal_autoconnect(self)
     self.wTree.get_widget('mainWindow').set_icon_from_file('obama.gif')
     self.init_widgets()
     self.pipe, pipe = Pipe()
     if os.name == 'nt':
         freezeSupport()
     self.p = Updater(pipe)
     self.p.start()
     
     self.update_projection()
     gobject.idle_add(self.update_results)
Esempio n. 4
0
    def __init__(self, maxsize=0):
        reader, writer = Pipe(duplex=False)
        rlock = Lock()
        if sys.platform == 'win32':
            wlock = None
        else:
            wlock = Lock()
        if maxsize < 0:
            maxsize = 0
        if maxsize == 0:
            sem = None
        else:
            sem = BoundedSemaphore(maxsize)

        state = maxsize, reader, writer, rlock, wlock, sem, os.getpid()
        self.__setstate__(state)

        if sys.platform != 'win32':
            _registerAfterFork(self, Queue._afterFork)
Esempio n. 5
0
class ElectionSim(object):
    def __init__(self):
        self.update = True
        self.gladefile = 'election.glade'
        self.wTree = gtk.glade.XML(self.gladefile, 'mainWindow')
        
        self.wTree.signal_autoconnect(self)
        self.wTree.get_widget('mainWindow').set_icon_from_file('obama.gif')
        self.init_widgets()
        self.pipe, pipe = Pipe()
        if os.name == 'nt':
            freezeSupport()
        self.p = Updater(pipe)
        self.p.start()
        
        self.update_projection()
        gobject.idle_add(self.update_results)
    
    def init_widgets(self):
        self.state_table = self.wTree.get_widget('state_table')
        self.state_widgets = {}
        for idx, (norm, (name, votes)) in enumerate(STATES.iteritems()):
            table = gtk.Table(2, 2)
            table.set_name('%s_table' % norm)
            table.attach(gtk.Label('%s:' % name), 0, 1, 0, 1)
            slider = gtk.HScale(gtk.Adjustment(value=50, upper=100))
            slider.set_name('%s_scale' % norm)
            slider.set_draw_value(False)
            slider.connect('value-changed', self.slider_moved)
            sub_table = gtk.Table(2, 2)
            obama_box = gtk.CheckButton(label='Obama')
            obama_box.set_name('%s_obama' % norm)
            obama_box.connect('toggled', self.winner_determined)
            obama_label = gtk.Label('50%')
            obama_label.set_name('%s_obama_percent' % norm)
            mccain_box = gtk.CheckButton(label='McCain')
            mccain_box.set_name('%s_mccain' % norm)
            mccain_box.connect('toggled', self.winner_determined)
            mccain_label = gtk.Label('50%')
            mccain_label.set_name('%s_mccain_percent' % norm)
            sub_table.attach(obama_box, 0, 1, 0, 1)
            sub_table.attach(obama_label, 1, 2, 0, 1)
            sub_table.attach(mccain_box, 0, 1, 1, 2)
            sub_table.attach(mccain_label, 1, 2, 1, 2)
            table.attach(sub_table, 1, 2, 1, 2)
            table.attach(slider, 1, 2, 0, 1)
            self.state_widgets[norm] = (slider, obama_box, obama_label, mccain_box, mccain_label)
            self.state_table.attach(table, idx/10, idx/10+1, idx % 10, idx % 10 + 1)
        self.state_table.show_all()
    
    def slider_moved(self, widget):
        self.update_projection()
        name = '_'.join(widget.get_name().rsplit('_')[:-1])
        self.state_widgets[name][2].set_text('%s%%' % int(widget.get_value()))
        self.state_widgets[name][4].set_text('%s%%' % int(100-widget.get_value()))
    
    def update_projection(self):
        if not self.update:
            return
        data = {}
        for slider, obama_box, obama_label, mccain_box, mccain_label in self.state_widgets.itervalues():
            data['_'.join(slider.get_name().rsplit('_')[:-1])] = slider.get_value()
        self.pipe.send(data)

    def update_results(self):
        if not self.pipe.poll():
            return True
        while self.pipe.poll():
            result = self.pipe.recv()
        self.wTree.get_widget('obama_count').set_text("%s%%" % int(100 * float(result[0])/SIMULATION_COUNT))
        self.wTree.get_widget('mccain_count').set_text("%s%%" % int(100 * float(result[1])/SIMULATION_COUNT))
        return True
    
    def winner_determined(self, widget):
        name = '_'.join(widget.get_name().rsplit('_')[:-1])
        winner = widget.get_name().rsplit('_')[-1]
        if widget.get_active():
            if winner == 'obama':
                idx = 3
                value = 100
            else:
                idx = 1
                value = 0
            self.state_widgets[name][idx].set_sensitive(False)
            self.state_widgets[name][0].set_value(value)
            self.state_widgets[name][0].set_sensitive(False)
        else:
            if winner == 'obama':
                idx = 3
            else:
                idx = 1
            self.state_widgets[name][idx].set_sensitive(True)
            self.state_widgets[name][0].set_value(self.wTree.get_widget('overall_slider').get_value())
            self.state_widgets[name][0].set_sensitive(True)
    
    def overall_changed(self, widget):
        self.update = False
        value = widget.get_value()
        self.wTree.get_widget('overall_obama').set_text('%s%%' % int(value))
        self.wTree.get_widget('overall_mccain').set_text('%s%%' % (100 - int(value)))
        for slider, obama_box, obama_label, mccain_box, mccain_label in self.state_widgets.itervalues():
            if slider.get_property('sensitive'):
                slider.set_value(value)
        self.update = True
        self.update_projection()
    
    def reset(self, widget):
        self.update = False
        self.wTree.get_widget('overall_slider').set_value(50)
        for slider, obama_box, obama_label, mccain_box, mccain_label in self.state_widgets.itervalues():
            slider.set_sensitive(True)
            slider.set_value(50)
            obama_box.set_sensitive(True)
            mccain_box.set_sensitive(True)
            obama_box.set_active(False)
            mccain_box.set_active(False)
        self.update = True
        self.update_projection()
    
    def save(self, widget):
        data = {}
        data['__all__'] = self.wTree.get_widget('overall_slider').get_value()
        for slider, obama_box, obama_label, mccain_box, mccain_label in self.state_widgets.itervalues():
            name = '_'.join(slider.get_name().rsplit('_')[:-1])
            data[name] = (slider.get_value(), obama_box.get_active(), mccain_box.get_active())
        pickle.dump(data, open('data.txt', 'w'))
    
    def load(self, widget):
        data = pickle.load(open('data.txt'))
        self.wTree.get_widget('overall_slider').set_value(data.pop('__all__', 50))
        for name, (value, obama, mccain) in data.iteritems():
            self.state_widgets[name][0].set_value(value)
            self.state_widgets[name][1].set_active(obama)
            self.state_widgets[name][3].set_active(mccain)
    
    def quit(self, *args, **kwargs):
        gtk.main_quit()
        self.p.terminate()