code: def main():
    
    r = Random(42)
  
    # Measure serialization
    startSerializationTime = time.time()
  
    for i in xrange(_SERIALIZATION_LOOPS):
      # NOTE pycapnp's builder.from_dict (used in nupic.bindings) leaks
      # memory if called on the same builder more than once, so we construct a
      # fresh builder here
      builderProto = RandomProto.new_message()
      r.write(builderProto)
  
    elapsedSerializationTime = time.time() - startSerializationTime
  
  
    builderBytes = builderProto.to_bytes()
  
  
    # Measure deserialization
    startDeserializationTime = time.time()
  
    deserializationCount = 0
    while deserializationCount < _DESERIALIZATION_LOOPS:
      # NOTE: periodicaly create a new reader to avoid "Exceeded message traversal
      # limit" error
      readerProto = RandomProto.from_bytes(
        builderBytes,
        traversal_limit_in_words=_TRAVERSAL_LIMIT_IN_WORDS,
        nesting_limit=_NESTING_LIMIT)
  
      numReads = min(_DESERIALIZATION_LOOPS - deserializationCount,
                       _MAX_DESERIALIZATION_LOOPS_PER_READER)
      for _ in xrange(numReads):
        r.read(readerProto)
  
      deserializationCount += numReads
  
    elapsedDeserializationTime = time.time() - startDeserializationTime
  
    # Print report
    print _SERIALIZATION_LOOPS, "Serialization loops in", \
          elapsedSerializationTime, "seconds."
    print "\t", elapsedSerializationTime/_SERIALIZATION_LOOPS, "seconds per loop."
  
    print deserializationCount, "Deserialization loops in", \
          elapsedDeserializationTime, "seconds."
    print "\t", elapsedDeserializationTime/deserializationCount, "seconds per loop."
docs: Measure capnp serialization performance of Random