def __init__(self, id, turned_on_list, bpm, host):
        """
        Initializes a Bulb process

        :param id: The unique id of the bulb which acts as its name, ranges from 
        0 to 12
        :type id: long
        :param turned_on_list: Used to keep track of which bulbs are currently 
        turned on. The list is of length 13 with information about the status of 
        a particular bulb located at the index equal to its id.
        :type turned_on_list: multiprocessing.Array
        :type bpm: The pulse that the bulb should use when determining when to turn
        on and off. This is calculated using the webcame_pulse library. 
        :type bpm: int
        :param host: The ip address of the power strip that the bulb is physically
        plugged into.
        :type host: string 
        :return: A Bulb Process
        :type return: Bulb()
        """
        super(Bulb, self).__init__()
        self.id = id

        # A random int used to determine the leader in leader election. With a
        # high probability, these will be unique.
        self.uuid = random.randint(1, 2**64 - 1)

        # A dict where the keys are the uuid of a bulb process and the values
        # are the bulb process object.
        self.uuid_dict = {}

        # A list of all the bulb process objects.
        self.bulb_objects_list = None

        # A list of bulb process objects that are a part of the current election
        # this is used in new_leader_election but not first_election.
        self.bulbs_in_election = None

        # The bulb process object of the leader
        self.leader = None

        # A multiprocessing.Value containing the id of the leader.
        self.leader_id = Array('i', 1)

        # A BulbQueue() used to communicate information related to leader election.
        self.election_q = BulbQueue()

        # A BulbQueue() used to communicate between neighbor bulbs.
        self.state_q = BulbQueue()

        # A random time that a bulb process will sleep before pinging the leader
        # or responding to pings. This is used to prevent 13 simultaneous while
        # loops and to introduce interesting time differences between bulb flashes.
        self.ping_time = random.randint(1, 12)

        # This is the a max time that a bulb will wait for another bulb to respond.
        self.max_timeout = 15

        self.turned_on_list = turned_on_list
        self.bpm = bpm
        self.host = host