Nano Hash - криптовалюты, майнинг, программирование

Как получить несколько запросов, но принять только один запрос в Simpy

В Simpy у меня есть несколько ресурсов, которые могут выполнять одну и ту же работу, но они разные, поэтому я не могу просто увеличить мощность. Представьте себе единственную очередь в торговом центре, которая ведет ко всем кассам. Некоторые из них обслуживаются, а некоторые обслуживаются самостоятельно. Я помещаю запрос на оба (два отдельных запроса), а затем выдаю rq_manned ИЛИ rq_selfserve, удовлетворенный, если хотя бы один из запросов удовлетворен.

Проблема в том, что если они оба станут доступны одновременно, я не хочу запрашивать их оба. Что делать?

02.04.2020

Ответы:


1

Что-то вроде этого может сработать:

with rq_manned.request() as manned_req, rq_selfserve.request() as sserve.req:
   result = yield manned_req | sserve.req
   if manned_req in result:
      do_manned_register_stuff()
   else:
      do selfserved_register_stuff()
21.04.2020
  • Привет Том, спасибо за ваш ответ. Это может сработать, но риск, который я вижу, заключается в том, что если он соберет их оба одновременно, он может фактически не освободить ресурс selfserved_register до завершения do_manned_register_stuff, что может занять очень много времени. Мое понимание использования оператора with заключается в том, что ресурс не освобождается до тех пор, пока вы не достигнете части кода без отступов. 23.04.2020
  • Другой метод — использовать Stores вместо Resources. Вы можете настроить отдельные ресурсы в магазине с атрибутами, которые могут быть как разными, так и одинаковыми. Таким образом, я могу настроить самообслуживание и обслуживаемые регистры, все они могут иметь атрибут, позволяющий оформлять заказы клиентов, но они также могут иметь разные атрибуты (например, если они доступны, обслуживаемые быстрее, поскольку они упаковывают ваши сумки). Думаю, можно и приоритет сделать, на случай, если оба станут доступны одновременно. simpy.readthedocs.io/en/latest/topical_guides/resources.html 23.04.2020
  • Привет, Дэн, мое требование похоже на твое, но с более динамичным содержанием. У меня есть много объектов динамических запросов, и в зависимости от задачи я должен получить несколько из многих, чтобы выполнить некоторые действия\задачу. Любая идея о том, как построить оператор yield на лету, а также освободить неиспользуемые. 10.09.2020

  • 2

    Я предполагаю, что главная проблема заключается в том, что SimPy не видит пользователя, запрашивающего какой-либо из нескольких ресурсов. Он видит независимые запросы по каждому из ресурсов, не беспокоясь о том, кто их сделал.

    Поэтому, как вы указали, SimPy yield env.any_of() здесь бесполезен, учитывая, что каждый отдельный Запрос будет проходить процесс постановки в очередь, использования и освобождения соответствующего ресурса.

    Я лично боролся с подобными проблемами и в итоге решил создать более высокий уровень абстракции поверх SimPy, который теперь является Проект Хронон.

    В Chronon ваш запрос будет выглядеть примерно так:

    yield user.waits(
       [self_teller01, self_teller02, ..., manned_teller01, manned_teller02, ...],
       which='any'
    )
    

    по которому выполняется user waits для любого из ресурсов в списке, отзывая все остальные запросы при получении доступа к одному из них.

    Этот пример системы проката велосипедов демонстрирует все функции, которые вы наверное надо.

    05.01.2021
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..