Advertisement
Guest User

thread-safe-like dict

a guest
Feb 21st, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.18 KB | None | 0 0
  1. import threading
  2. from queue import Queue
  3. import time
  4. from random import randint, seed
  5. seed()
  6. import sys
  7. #print("getcheckinterval= ", sys.getcheckinterval())
  8. #sys.setcheckinterval(1)
  9. print("getcheckinterval= ", sys.getcheckinterval())
  10. print("cavolo")
  11.  
  12. numeroVolte = 500000
  13. numeroVoci = 10
  14. threadN = 4
  15. startTick = 256
  16.  
  17. #from contextlib import ContextDecorator
  18.  
  19. class Clienti():
  20.  
  21.     def __init__(self, codUs):
  22.         self.lock = threading.Lock()
  23.         self.lock.acquire()
  24.         self.codUs = codUs
  25.         self.oldCarica = list()
  26.         self.incarica()
  27.  
  28.         self.lock.release()
  29.  
  30.     def incarica(self):
  31.         self.carica = bytes()
  32.         self.tup = (randint(2024, 53247), )
  33.         iTup = 9348532659245850625 - id(self.tup)
  34.         for j in range(4):
  35.             parzialeMod = iTup.__mod__(53247) + 2048
  36.             iTup = iTup//2048
  37.             self.carica += chr(parzialeMod).encode()
  38.         try:
  39.             dDic[self.carica]
  40.             self.oldCarica.append((dDic[self.carica], self.codUs,None,"AAAAAAAAAAAAAAAAAAAGià presente", sys.getcheckinterval()))
  41.         except:
  42.             dDic[self.carica] = self.codUs
  43.  
  44.     def wriRanInt(self, item):
  45.         # riscrivo la voce
  46.         if self.lock.acquire():
  47.             if self.carica:
  48.                 # già stato caricato
  49.                 try:
  50.                     # quindi ci dovrebbe essere:
  51.                     dDic[self.carica]
  52.                     if dDic[self.carica] != item[0]:
  53.                         self.oldCarica.append((self.carica, self.codUs, dDic[self.carica], "div W"))
  54.                     dDic.__delitem__(self.carica)
  55.                 except:
  56.                     self.oldCarica.append((self.carica, self.codUs, None,  "Inesistente1"))
  57.             self.incarica()
  58.             self.lock.release()
  59.  
  60.     def delRanInt(self, item):
  61.         # distruggo la voce
  62.         if self.lock.acquire():
  63.             if self.carica:
  64.                 # già stato caricato
  65.                 try:
  66.                     # quindi ci dovrebbe essere:
  67.                     dDic[self.carica]
  68.                     if dDic[self.carica] != item[0]:
  69.                         self.oldCarica.append((self.carica, self.codUs, dDic[self.carica], "div D"))
  70.                     dDic.__delitem__(self.carica)
  71.                 except:
  72.                     self.oldCarica.append((self.carica, self.codUs, None, "Inesistente2"))
  73.             self.tup = None
  74.             self.carica = None
  75.             self.lock.release()
  76.  
  77.     def reaRanInt(self, item):
  78.         # qui leggo solo:
  79.         if self.lock.acquire():
  80.             if self.carica:
  81.                 # già stato caricato
  82.                 try:
  83.                     # quindi ci dovrebbe essere:
  84.                     dDic[self.carica]
  85.                     if dDic[self.carica] != item[0]:
  86.                         self.oldCarica.append((self.carica, self.codUs, dDic[self.carica], "div R"))
  87.                         #print((item[0], self.codUs, dDic[self.carica], "++++++++++++++++div R", sys.getcheckinterval()))
  88.                 except:
  89.                     self.oldCarica.append((self.carica, self.codUs, None, "Inesistente3"))
  90.                     self.incarica()
  91.             self.lock.release()
  92.  
  93. def provaCombinazioni():
  94.  
  95.     for j in range(numeroVoci):
  96.         # carico qui
  97.         dizio[j] = Clienti(j)
  98.  
  99.     def do_work(item):
  100.         #chi = randint(0, 9)
  101.         #cheFaccio = randint(0, 9)
  102.         #q.put((chi, cheFaccio))
  103.         chi, chefaccio = item
  104.  
  105.         if chefaccio < 2:
  106.             # riscrivo
  107.             return dizio[chi].wriRanInt(item)
  108.  
  109.         if chefaccio < 4:
  110.             # cancello
  111.             return dizio[chi].delRanInt(item)
  112.  
  113.         # cazzeggio
  114.         return dizio[chi].reaRanInt(item)
  115.  
  116.     # The worker thread pulls an item from the queue and processes it
  117.     def worker():
  118.         while True:
  119.             item = q.get()
  120.             do_work(item)
  121.             q.task_done()
  122.  
  123.     # Create the queue and thread pool.
  124.     q = Queue()
  125.     #for i in range(4):
  126.     for i in range(threadN):
  127.          t = threading.Thread(target=worker)
  128.          t.daemon = True  # thread dies when main thread (only non-daemon thread) exits.
  129.          t.start()
  130.  
  131.  
  132.     #passo = 0
  133.     #pip = 0
  134.     #ilPasso = un tot minore di numeroVolte
  135.  
  136.     for volta in range(numeroVolte):
  137.         # se scommenti qui anche le due righe sopra ed
  138.         #passo += 1
  139.         #if passo == ilPasso:
  140.             #pip +=1
  141.             #passo = 0
  142.             #print('++++', pip)
  143.  
  144.         laVoce = randint(0, numeroVoci -1)
  145.         cheFaccio = randint(0, 9)
  146.         q.put((laVoce, cheFaccio))
  147.         q.join()       # block until all tasks are done
  148.  
  149.  
  150. for div in range(8):
  151.     startTick //= 2
  152.     sys.setcheckinterval(startTick)
  153.  
  154.     dDic = dict()
  155.     dizio = dict()
  156.  
  157.     provaCombinazioni()
  158.  
  159.     start = time.perf_counter()
  160.     print("sys.setcheckinterval(startTick):", sys.getcheckinterval(),'time:',time.perf_counter() - start)
  161.  
  162.     for j in range(numeroVoci):
  163.         for jj in dizio[j].oldCarica:
  164.             if "ente" in jj[3]:
  165.                 print(jj)
  166.             if "Try" in jj[3]:
  167.                 print(jj)
  168.             if "dev" in jj[3]:
  169.                 print(jj)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement