Guest User

2 Threads

a guest
Jan 22nd, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.55 KB | None | 0 0
  1. import datetime, os
  2. import pylab as pl
  3. from threading import Thread
  4.  
  5. #Обозначил границы, которые может принимать элементы аргумента
  6. step01 = 0.1
  7.  
  8. startMin = 0.1
  9. startMax = 5
  10.  
  11. normMin = 0.1
  12. normMax = 5
  13.  
  14. critMin = 0.1
  15. critMax = 5
  16.  
  17. # ListX и ListY это текствоые файлы, в которых куча float разделенных через , Пример: 0.33509000,0.33509000,0.33514000,0.33590000....
  18. listAFile = open('ListX.py', 'r')
  19. lines = listAFile.read().split(',')
  20. listAFile.close()
  21. ListA = lines
  22. print('ListA Loaded')
  23. listBFile = open('ListY.py', 'r')
  24. lines = listBFile.read().split(',')
  25. listBFile.close()
  26. ListB = lines
  27. print('ListB Loaded')
  28.  
  29. result0 = 0
  30. result1 = 0
  31. #Сама функция. Сильно урезана, мб даже работает неправильно и по факту полностью бесполезна, но операции +- делает такие же, что и оригинальная
  32. def test(argum, thr):
  33.     try:
  34.         start = argum[0]
  35.         norm = argum[1]
  36.         crit = argum[2]
  37.         Status = 0
  38.         timeCounter = 0
  39.         result = 0
  40.  
  41.         def StartFunc (atr):
  42.             startEdge = ((start + 100) / 100) * atr
  43.             return startEdge
  44.         def NormFunc(atr):
  45.             normEdge = ((100 - norm) / 100) * atr
  46.             return normEdge
  47.         def CritFunc(atr):
  48.             critEdge = ((100 - crit) / 100) * atr
  49.             return critEdge
  50.  
  51.         while True:
  52.             if (Status == 0):
  53.                 timeCounter += 1
  54.                 y = float(ListB[timeCounter])
  55.                 startEdge = StartFunc(y)
  56.                 critEdge = CritFunc(y)
  57.                 while (Status == 0):
  58.                     timeCounter += 1
  59.                     y = float(ListB[timeCounter])
  60.                     if (y >= startEdge):
  61.                         startEdge = y
  62.                         normEdge = NormFunc(startEdge)
  63.                         while True:
  64.                             timeCounter += 1
  65.                             y = float(ListB[timeCounter])
  66.                             if (y > startEdge):
  67.                                 startEdge = y
  68.                                 normEdge = NormFunc(startEdge)
  69.                             if (y <= normEdge):
  70.                                 result += 1
  71.                                 Status = 1
  72.                                 break
  73.                     if (y <= critEdge):
  74.                         result -= 1
  75.                         Status = 1
  76.  
  77.             if (Status == 1):
  78.                 timeCounter += 1
  79.                 x = float(ListA[timeCounter])
  80.                 startEdge = StartFunc(x)
  81.                 critEdge = CritFunc(x)
  82.                 while (Status == 1):
  83.                     timeCounter += 1
  84.                     x = float(ListA[timeCounter])
  85.                     if (x <= startEdge):
  86.                         startEdge = x
  87.                         normEdge = NormFunc(startEdge)
  88.                         while True:
  89.                             timeCounter += 1
  90.                             x = float(ListA[timeCounter])
  91.                             if (x < startEdge):
  92.                                 startEdge = x
  93.                                 normEdge = NormFunc(startEdge)
  94.                             if (x >= normEdge):
  95.                                 Status = 0
  96.                                 result += 1
  97.                                 break
  98.                     if (x >= critEdge):
  99.                         Status = 0
  100.                         result -= 1
  101.     except Exception:
  102.         if (thr == 0):
  103.             global result0
  104.             result0 = result
  105.         if (thr == 1):
  106.             global result1
  107.             result1 = result
  108.  
  109.  
  110. #Для проверки времени, которое занимает скрипт
  111. benchOver = 10
  112. BenchCounterMax = 100
  113. timeStart = datetime.datetime.now()
  114.  
  115. print('Start')
  116. thrArgum = 0
  117. BestResult = 0
  118. Result = 0
  119. Counter = 0
  120. #Таким образом я перебираю аргументы для функции
  121. for ar1 in pl.frange(startMin, startMax, step01):
  122.     for ar2 in pl.frange(normMin, normMax, step01):
  123.         for ar3 in pl.frange(critMin, critMax, step01):
  124.             Counter += 1
  125.             argum = ar1, ar2, ar3
  126.             thrArgum += 1
  127.             if (thrArgum == 1):
  128.                 argum1 = argum
  129.             if (thrArgum == 2):
  130.                 argum2 = argum
  131.                 thrArgum = 0
  132.                 th1 = Thread(target=test,args=(argum1,0,))
  133.                 th2 = Thread(target=test,args=(argum2,1,))
  134.                 th1.start(); th2.start()
  135.                 th1.join(); th2.join()
  136.                 if (result0 >= result1):
  137.                     Result = result0
  138.                 if (result0 < result1):
  139.                     Result = result1
  140.    
  141.             if (Result > BestResult):
  142.                 print('Found new BestResult')
  143.                 print(Result)
  144.                 BestResult = Result
  145.                 BestArgum = argum
  146.             #Каждых 100 выполнений функции, показывает сколько времени заняло эти последние 100 функций            
  147.             if ((Counter == BenchCounterMax) and (benchOver > 0)):
  148.                 BenchCounterMax += 100
  149.                 speed = datetime.datetime.now() - timeStart
  150.                 timeStart = datetime.datetime.now()
  151.                 benchOver -= 1
  152.                 print(speed, Counter)
  153. print('End')
  154. print(BestResult)
  155. print(BestArgum)
Advertisement
Add Comment
Please, Sign In to add comment