import random
import os
import time
from multiprocessing import Process, Queue
def rnd(kolvo, resultQ):
start_time = time.time() # Сохраняем время
o = 0 # Количество "орлов"
r = 0 # Количество "решек"
kol = 0 # Всего бросков
proc = os.getpid() # Получаем номер процесса, для отладки
while kol != kolvo:
# Кидаем монетку
tmp = random.randint(0, 1) # возвращает всегда int
if tmp == 0: # у нас всего два возможных варианта. (можно еще сократить, написав if tmp:, при 0 будет False)
o += 1 # короткая форма записи, аналог x = x + 1
else:
r += 1
kol += 1
resultQ.put((o, r)) # Кладем в очередь объект (кортеж)
# Для отладки
print('Номер процесса - ' + str(proc))
print("--- %s секунд ---" % (time.time() - start_time))
if __name__ == '__main__': # Не понял зачем эта строка, но так работает
start_time = time.time() # Сохраняем время
resultQueue = Queue() # создаем очередь
kolvo = 2500000 # Количество бросков для каждого процесса
procNum = 5 # количество воркеров
processes = [] # список с процессами, дабы иметь к ним доступ, и что бы их не удалил сборщик мусора
# Инициализируем (и сразу стартуем)
for _ in range(procNum): # переменная _ используется как и обычные, но по соглашению именно _ означает, что она
# использоваться не будет
proc = Process(target=rnd, args=(kolvo, resultQueue))
processes.append(proc)
proc.start()
# Для отладки
#print("--- %s секунд --- Процессы стартанули!" % (time.time() - start_time))
# Заканчиваем (не заканчиваем, а ожидаем завершения) пока не завешится процесс к которого м ждем, выполнение останавливается
for proc in processes:
proc.join()
o = 0
r = 0
for _ in range(resultQueue.qsize()):
queueItem = resultQueue.get() # читаем из очереди
o += queueItem[0]
r += queueItem[1]
# Считываем данные из файла и выводим их на экран
# file = open('test.txt', 'r', encoding='utf-8')
# read = file.readlines()
# file.close()
print('%% выпадения решки = %s' % (r / (kolvo * procNum) * 100))
print('%% выпадения орла {0}'.format(o / (kolvo * procNum) * 100))
print('Всего бросков %s' % (kolvo * procNum))
print("--- %s секунд --- ВЕСЬ КОД!" % (time.time() - start_time)) # Время выполнения всего кода
self.entryFileName = 'self.entryFileName not changed!',
создаете список - проходите циклом по тексту: ищете .SUBCKT ***- добавляете строки в список, пока не наткнетесь на .ENDS ***. добавляете этот список к итоговому списку.
список с блоками готов.
Внутри блока тоже самое, только ищете SWITCH, а если вдруг попалось .MODEL, то все, свитчи кончились.
Дальше все сведется к обработке\подсчету небольших блоков данных.