Рефакторинга кода

4:20

Новичок
Пользователь
Дек 2, 2020
1
0
1
Python:
import os, sys, platform
import multiprocessing
import timeit
import threading
from jinja2 import Template
from statistics import median


lock = threading.Lock()


def obliczanie_sumy(liczby):
    lock.acquire()
    for liczba in liczby:
        suma = 0
        for i in range(1, liczba + 1):
            suma = suma + i
    lock.release()



def jeden_watek(liczby):
    starttime_1 = timeit.default_timer()
    print("The start time is :", starttime_1)

    thread_1 = threading.Thread(target=obliczanie_sumy, args=(liczby, ))
    thread_1.start()
    thread_1.join()
    finish_1 = timeit.default_timer() - starttime_1
    print("The time difference is :", finish_1)
    return round(finish_1, 3)


def cztery_watki(liczby1, liczby2, liczby3, liczby4):

    starttime_2 = timeit.default_timer()
    print("The start time is :", starttime_2)
    threads_2 = [
        threading.Thread(target=obliczanie_sumy, args=(liczby1, )),
        threading.Thread(target=obliczanie_sumy, args=(liczby2, )),
        threading.Thread(target=obliczanie_sumy, args=(liczby3, )),
        threading.Thread(target=obliczanie_sumy, args=(liczby4, ))
        ]
    for thread in threads_2:
        thread.start()

    for thread in threads_2:
        thread.join()

    finish_2 = timeit.default_timer() - starttime_2
    print("The time difference is :", finish_2)
    return round(finish_2, 3)


def cztery_procesy(liczby1, liczby2, liczby3, liczby4):

    starttime_3 = timeit.default_timer()
    print("The start time is :", starttime_3)

    processes = [
            multiprocessing.Process(target=obliczanie_sumy, args=(liczby1,)),
            multiprocessing.Process(target=obliczanie_sumy, args=(liczby2,)),
            multiprocessing.Process(target=obliczanie_sumy, args=(liczby3,)),
            multiprocessing.Process(target=obliczanie_sumy, args=(liczby4,)),
        ]
    for p in processes:
        p.start()

    for p in processes:
        p.join()

    finish_3 = timeit.default_timer() - starttime_3
    print("The time difference is :", finish_3)
    return round(finish_3, 3)


def osiem_procesow(liczby1, liczby2, liczby3, liczby4, liczby5, liczby6, liczby7, liczby8):
    starttime_4 = timeit.default_timer()
    print("The start time is :", starttime_4)

    processes = [
            multiprocessing.Process(target=obliczanie_sumy, args=(liczby1,)),
            multiprocessing.Process(target=obliczanie_sumy, args=(liczby2,)),
            multiprocessing.Process(target=obliczanie_sumy, args=(liczby3,)),
            multiprocessing.Process(target=obliczanie_sumy, args=(liczby4,)),
            multiprocessing.Process(target=obliczanie_sumy, args=(liczby5,)),
            multiprocessing.Process(target=obliczanie_sumy, args=(liczby6,)),
            multiprocessing.Process(target=obliczanie_sumy, args=(liczby7,)),
            multiprocessing.Process(target=obliczanie_sumy, args=(liczby8,)),
    ]
    for p in processes:
        p.start()

    for p in processes:
        p.join()

    finish_4 = timeit.default_timer() - starttime_4
    print("The time difference is :", finish_4)
    return round(finish_4, 3)

if __name__ == '__main__':

    liczby = [15972490, 80247910, 92031257, 75940266,
              97986012, 87599664, 75231321, 11138524,
              68870499, 11872796, 79132533, 40649382,
              63886074, 53146293, 36914087, 62770938]

    liczby1 = [15972490, 80247910, 92031257, 75940266]
    liczby2 = [97986012, 87599664, 75231321, 11138524]
    liczby3 = [68870499, 11872796, 79132533, 40649382]
    liczby4 = [63886074, 53146293, 36914087, 62770938]

    dwieliczby1 = [15972490, 80247910]
    dwieliczby2 = [92031257, 75940266]
    dwieliczby3 = [97986012, 87599664]
    dwieliczby4 = [75231321, 11138524]
    dwieliczby5 = [68870499, 11872796]
    dwieliczby6 = [79132533, 40649382]
    dwieliczby7 = [63886074, 53146293]
    dwieliczby8 = [36914087, 62770938]

    lista_jeden_watek = []
    for i in range(1, 6):
        lista_jeden_watek.append(jeden_watek(liczby))

    lista_cztery_watki = []
    for i in range(1, 6):
        lista_cztery_watki.append(cztery_watki(liczby1, liczby2, liczby3, liczby4))

    lista_cztery_procesy = []
    for i in range(1, 6):
        lista_cztery_procesy.append(cztery_procesy(liczby1, liczby2, liczby3, liczby4))

    lista_osiem_procesow = []
    for i in range(1, 6):
        lista_osiem_procesow.append(osiem_procesow(dwieliczby1, dwieliczby2, dwieliczby3, dwieliczby4, dwieliczby5,
                                               dwieliczby6, dwieliczby7, dwieliczby8))



можно ли что-то сделать чтоб было более читабельнее и производительнее ?
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
processes = [ multiprocessing.Process(target=obliczanie_sumy, args=(liczby1,)), multiprocessing.Process(target=obliczanie_sumy, args=(liczby2,)), multiprocessing.Process(target=obliczanie_sumy, args=(liczby3,)), multiprocessing.Process(target=obliczanie_sumy, args=(liczby4,)), multiprocessing.Process(target=obliczanie_sumy, args=(liczby5,)), multiprocessing.Process(target=obliczanie_sumy, args=(liczby6,)), multiprocessing.Process(target=obliczanie_sumy, args=(liczby7,)), multiprocessing.Process(target=obliczanie_sumy, args=(liczby8,)), ]
Все эти вещи можно завернуть в компрех. Гугли про list comprehension.
 

Форум IT Специалистов