스케쥴링 병렬 처리

  • 웨이트 타임을 비교해, 우선 큐 지정 후 작업 할당.


import numpy as np

import queue


# Interval Time , Service time 변수  

lamb=float(5) 

mu = float(3) 


# 큐생성

queue1 = queue.Queue()

queue2 = queue.Queue()


# 처음 작업이 들어오는 경우.

Fisrt_Arrival = np.random.exponential(lamb)

First_Service = np.random.exponential(mu) 


# 처음 작업 출력.

print("First_Arrival : ", Fisrt_Arrival)

print("First_Service : ", First_Service)

print("---------------------------------------------------")


# 변수 통일을 위해 저장.

Next_Arrival = Fisrt_Arrival

Next_Service = First_Service


# 카운트 만큼 실행.

count = 0

wait = 0

Finish_time1 = 0

Finish_time2 = 0

while count<10:

    count+=1

    

    # queue 1인지 2인지 알려 줄 스위치. queue가 1이면 0, queue가 1이면 1

    sw = 0

    Now_queue=0    

    

    if (Finish_time1-Next_Arrival) <= (Finish_time2-Next_Arrival):

        queue1.put(Next_Arrival+Next_Service+wait)

        Now_queue = queue1

        sw = 0

    else:

        queue2.put(Next_Arrival+Next_Service+wait)

        Now_queue = queue2

        sw = 1

    

    # 도착 시간 갱신.

    while Next_Arrival < Next_Service:

        Next_Arrival += np.random.exponential(lamb)

        

    Finish_time = Now_queue.get()



    # 작업 종료 시간 가져오기.


    if sw == 0 :

        Finish_time1 = Finish_time

    else:

        Finish_time2 = Finish_time


    if (Finish_time1-Next_Arrival) <= (Finish_time2-Next_Arrival):

        if (Finish_time1 - Next_Arrival) > 0 :

            wait = Finish_time1 - Next_Arrival

        else:

            wait = 0

    else :

        if (Finish_time2 - Next_Arrival) > 0 :

            wait = Finish_time2 - Next_Arrival

        else:

            wait = 0   

    

    print("executed queue : %d" % (sw+1))

    print("Finsh1 : ", Finish_time1)

    print("Finsh2 : ", Finish_time2)

    # 서비스 시간 갱신.

    if Now_queue.empty():

        Next_Service = Next_Arrival + np.random.exponential(mu)

    else:

        Next_Service = Next_Service + np.random.exponential(mu)

    

    # 웨이트 시간 출력 및 시간..

    print("Next_Arrival : ", Next_Arrival)

    print("Next_Service : ", Next_Service)

    # 웨이트 시간 없을때의 예외처리.

    if(wait < 0):

        print("Wait Time : 0")

        wait = 0

    else:

        print("Wait Time : ", wait)

    

    print("---------------------------------------------------")


+ Recent posts