Salve a tutti,
dovrebbero esservi gia' arrivati i voti dell'ultimo appello. Trattandosi di un tema d'esame piuttosto semplice, i voti sono abbastanza alti. Se non avete passato l'esame, dovreste riconsiderare seriamente la preparazione che avete fatto.
Per quanto riguarda le soluzioni, metto qui una soluzione degli esercizi di programmazione. Potete usare l'implementazione dei BTree fornita a lezione per verificare le soluzioni dell'esercizio relativo, e provare voi stessi il secondo esercizio.
#!/usr/bin/python
from threading import Thread, currentThread
from Queue import Queue
levels = [ 'ERROR', 'WARNING', 'DEBUG', 'INFO', 'SHUTDOWN' ]
class LogBuffer(Queue,Thread):
def __init__(self, filename):
Queue.__init__(self)
Thread.__init__(self)
self.file = open(filename, 'w')
def run(self):
while 1 :
tid, level, msg = self.get()
self.file.write(tid.getName()+': '+levels[level]+': '+msg+'\n')
if level == 4 :
self.file.close()
break
class Logger(object):
def __init__(self,logbuf):
self.logbuf = logbuf
def log(self,msg,lvl):
tpl = currentThread(),lvl,msg
self.logbuf.put(tpl)
# Test del sistema di logging
if __name__ == '__main__' :
lbuf = LogBuffer("test.log")
lbuf.start()
def user1():
l = Logger(lbuf)
for i in range(10):
l.log("test1",i%4)
def user2():
l = Logger(lbuf)
for i in range(10):
l.log("test2",i%4)
l.log("closing down",4)
Thread(target=user1).start()
Thread(target=user2).start()
#!/usr/bin/python
# Parte 1 (x serve a verificare quante operazioni si stanno eseguendo)
def lg1(m,n):
assert(m>1 and n>1)
assert(type(m)==int and type(n)==int)
x=0
k=0
while 1:
x+=k
if m**k<=n and n<m**(k+1) :
return k, x
k+=1
# Parte 2
def lg2(m,n):
assert(m>1 and n>1)
assert(type(m)==int and type(n)==int)
x=0
k=0
old=1
while 1:
x+=1
next=old*m
if old<=n and n<next :
return k, x
old=next
k+=1