mirror of
https://github.com/ammaraskar/pyCraft.git
synced 2024-11-24 11:16:13 +01:00
Make all connections write a time profile file for debugging issue #70.
This commit is contained in:
parent
88a5fdc637
commit
31e5d3ff2c
@ -394,7 +394,26 @@ class NetworkingThread(threading.Thread):
|
|||||||
self.previous_thread = None
|
self.previous_thread = None
|
||||||
self.connection.networking_thread = self
|
self.connection.networking_thread = self
|
||||||
|
|
||||||
|
prof_filename = '.'.join((
|
||||||
|
'pyCraft-profile',
|
||||||
|
self.connection.options.address,
|
||||||
|
str(self.connection.options.port),
|
||||||
|
str(__import__('os').getpid()),
|
||||||
|
'%x' % id(self.connection),
|
||||||
|
'json'))
|
||||||
|
prof = __import__('collections').OrderedDict({
|
||||||
|
'iterations': 0,
|
||||||
|
'reads': 0,
|
||||||
|
'writes': 0,
|
||||||
|
'read_time': 0.0,
|
||||||
|
'write_time': 0.0,
|
||||||
|
'sleep_time': 0.0,
|
||||||
|
})
|
||||||
|
prof_last_report = timeit.default_timer()
|
||||||
|
|
||||||
while not self.interrupt:
|
while not self.interrupt:
|
||||||
|
prof_start = timeit.default_timer()
|
||||||
|
|
||||||
# Attempt to write out as many as 300 packets as possible every
|
# Attempt to write out as many as 300 packets as possible every
|
||||||
# 0.05 seconds (20 ticks per second)
|
# 0.05 seconds (20 ticks per second)
|
||||||
num_packets = 0
|
num_packets = 0
|
||||||
@ -409,6 +428,10 @@ class NetworkingThread(threading.Thread):
|
|||||||
exc_info = sys.exc_info()
|
exc_info = sys.exc_info()
|
||||||
self.connection._write_lock.release()
|
self.connection._write_lock.release()
|
||||||
|
|
||||||
|
prof['write_time'] += timeit.default_timer() - prof_start
|
||||||
|
prof['writes'] += num_packets
|
||||||
|
prof_start = timeit.default_timer()
|
||||||
|
|
||||||
# Read and react to as many as 50 packets
|
# Read and react to as many as 50 packets
|
||||||
num_packets = 0
|
num_packets = 0
|
||||||
while num_packets < 50 and not self.interrupt:
|
while num_packets < 50 and not self.interrupt:
|
||||||
@ -437,8 +460,27 @@ class NetworkingThread(threading.Thread):
|
|||||||
if exc_info is not None:
|
if exc_info is not None:
|
||||||
raise_(*exc_info)
|
raise_(*exc_info)
|
||||||
|
|
||||||
|
prof['read_time'] += timeit.default_timer() - prof_start
|
||||||
|
prof['reads'] += num_packets
|
||||||
|
prof_start = timeit.default_timer()
|
||||||
|
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
|
|
||||||
|
prof_now = timeit.default_timer()
|
||||||
|
prof['sleep_time'] += prof_now - prof_start
|
||||||
|
prof['iterations'] += 1
|
||||||
|
|
||||||
|
# Write a profiling report every 5 minutes.
|
||||||
|
if prof_now - prof_last_report > 300:
|
||||||
|
prof['iter_reads'] = prof['reads']/prof['iterations']
|
||||||
|
prof['iter_writes'] = prof['writes']/prof['iterations']
|
||||||
|
prof['iter_read_time'] = prof['read_time']/prof['iterations']
|
||||||
|
prof['iter_write_time'] = prof['write_time']/prof['iterations']
|
||||||
|
prof['iter_sleep_time'] = prof['sleep_time']/prof['iterations']
|
||||||
|
with open(prof_filename, 'w') as file:
|
||||||
|
json.dump(prof, file, indent=4)
|
||||||
|
prof_last_report = prof_now
|
||||||
|
|
||||||
|
|
||||||
class IgnorePacket(Exception):
|
class IgnorePacket(Exception):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user