Simpy, как получить доступ к объектам в очереди ресурсов

Я перемещаю код, написанный на Simpy 2, в версию 3 и не смог найти эквивалент следующей операции.

В приведенном ниже коде я получаю доступ к объектам заданий (производным от класса job_(Process)) в ActiveQ ресурса Simpy.

def select_LPT(self, mc_no):
    job = 0
    ptime = 0
    for j in buffer[mc_no].activeQ:
        if j.proc_time[mc_no] > ptime:
            ptime = j.proc_time[mc_no]
            job = j

    return job

Чтобы сделать это в Simpy 3, я попробовал следующее

buffers[mc_no].users

который возвращает список объектов Request(). С этими объектами я не могу получить доступ ни к процессам, которые их создали, ни к объектам, которым принадлежат эти функции процесса. (использование «put_queue» и «get_queue» объекта Resource не помогло)

Какие-либо предложения ?


person Suleyman Karabuk    schedule 30.08.2016    source источник


Ответы (1)


В SimPy объекты запросов не знают, какой процесс их создал. Однако, поскольку мы находимся в стране Python, вы можете легко добавить эту информацию:

with resource.request() as req:
    req.obj = self
    yield req
    ...

 # In another process/function
 for user_req in resource.users:
     print(user_req.obj)
person Stefan Scherfke    schedule 31.08.2016
comment
Да здравствует земля питона! - Спасибо. У меня есть дополнительный вопрос: у меня есть класс заданий, в котором есть функция процесса go() - как в Simpy 2. С req.obj = self я вставляю данные объекта, теперь как я вставляю данные процесса. Мне это нужно, потому что я хочу прервать процесс и возобновить работу объекта задания. - person Suleyman Karabuk; 31.08.2016
comment
Ничего себе - разобрался. Просто создайте процесс в конструкторе объекта, сохраните его как атрибут, а затем получите доступ через объект задания. - person Suleyman Karabuk; 02.09.2016