Основное объяснение процесса:
Процесс имеет некоторые параметры инициализации, которые необходимо устанавливать динамически во время выполнения. Например, данные за определенное количество дат (final_lookback) необходимо извлечь из sql. Количество дат основано на параметре конфигурации (base_lookback) + количестве, полученном из другой таблицы. Таким образом, значение Final_lookback становится известно только после запуска процесса. Необходимо сохранить параметры динамической конфигурации для сравнения при следующем запуске процесса. Поэтому также важно, чтобы вычисляемые параметры не были случайно изменены позже в коде, тем самым меняя логику выполняемого процесса. Процесс имеет несколько параметров динамической конфигурации. Final_lookback является примером одного из них. Дополнительная сложность заключается в том, что процесс является многопоточным и некоторые динамические параметры являются общими для всех потоков, а другие зависят от потока и устанавливаются при запуске потока.
Этот вопрос состоит из двух частей:
Чтобы управлять всеми динамически вычисляемыми входными параметрами, чтобы весь процесс имел доступ к одним и тем же параметрам, и гарантировать, что их нельзя будет изменить позже в процессе, мы создали одноэлементный класс/объект. для хранения всех динамически изменяемых параметров времени выполнения. По сути, это список значений ключей, аналогичный тому, как configparser хранит данные. С возможностью блокировки после установки всех параметров. Кроме того, для управления параметрами, специфичными для потока, мы рассмотрели возможность создания словаря словарей, в котором каждый поток будет иметь свою собственную версию словаря параметров времени выполнения. Итак, вопрос 1. Есть ли лучший способ управления динамически устанавливаемыми параметрами конфигурации для типа процесса, описанного выше?
Если бы мы имели дело только с одной переменной, контекстные переменные могли бы быть подходящим местом. для хранения динамически изменяемой переменной с помощью функции-обертки для ее блокировки. Однако его необходимо передать в потоки, и, что более важно, в нашем сценарии у нас есть несколько переменных. Это поднимает идею использования контекстных переменных для хранения изменяемого объекта (словаря или класса). Кажется, что контекстные переменные могут содержать изменяемый объект, но неясно, как именно это реализовать. Должен ли класс параметров времени выполнения быть установлен один раз как синглтон при запуске, а контекстные переменные должны быть включены в класс? С контекстными переменными, содержащими словарь значений ключа? Или создать контекстные переменные отдельно и предоставить к ним доступ к классу среды выполнения - это будет означать, что для каждого файла потребуется два импорта: один для контекстных переменных и один для класса? Итак, второй вопрос: опробована ли идея использования контекстных переменных для хранения изменяемого контейнера? Будет ли это правильным решением для описанного процесса и будет ли переход к потокам работать так, чтобы каждый поток мог обновлять необходимые ему переменные contextvars, не затрагивая другие потоки?
Основное объяснение процесса: Процесс имеет некоторые параметры инициализации, которые необходимо устанавливать динамически во время выполнения. Например, данные за определенное количество дат (final_lookback) необходимо извлечь из sql. Количество дат основано на параметре конфигурации (base_lookback) + количестве, полученном из другой таблицы. Таким образом, значение Final_lookback становится известно только после запуска процесса. Необходимо сохранить параметры динамической конфигурации для сравнения при следующем запуске процесса. Поэтому также важно, чтобы вычисляемые параметры не были случайно изменены позже в коде, тем самым меняя логику выполняемого процесса. Процесс имеет несколько параметров динамической конфигурации. Final_lookback является примером одного из них. Дополнительная сложность заключается в том, что процесс является многопоточным и некоторые динамические параметры являются общими для всех потоков, а другие зависят от потока и устанавливаются при запуске потока. Этот вопрос состоит из двух частей: [list] [*]Чтобы управлять всеми динамически вычисляемыми входными параметрами, чтобы весь процесс имел доступ к одним и тем же параметрам, и гарантировать, что их нельзя будет изменить позже в процессе, мы создали одноэлементный класс/объект. для хранения всех динамически изменяемых параметров времени выполнения. По сути, это список значений ключей, аналогичный тому, как configparser хранит данные. С возможностью блокировки после установки всех параметров. Кроме того, для управления параметрами, специфичными для потока, мы рассмотрели возможность создания словаря словарей, в котором каждый поток будет иметь свою собственную версию словаря параметров времени выполнения. Итак, вопрос 1. Есть ли лучший способ управления динамически устанавливаемыми параметрами конфигурации для типа процесса, описанного выше? [*]Если бы мы имели дело только с одной переменной, контекстные переменные могли бы быть подходящим местом. для хранения динамически изменяемой переменной с помощью функции-обертки для ее блокировки. Однако его необходимо передать в потоки, и, что более важно, в нашем сценарии у нас есть несколько переменных. Это поднимает идею использования контекстных переменных для хранения изменяемого объекта (словаря или класса). Кажется, что контекстные переменные могут содержать изменяемый объект, но неясно, как именно это реализовать. Должен ли класс параметров времени выполнения быть установлен один раз как синглтон при запуске, а контекстные переменные должны быть включены в класс? С контекстными переменными, содержащими словарь значений ключа? Или создать контекстные переменные отдельно и предоставить к ним доступ к классу среды выполнения - это будет означать, что для каждого файла потребуется два импорта: один для контекстных переменных и один для класса? Итак, второй вопрос: опробована ли идея использования контекстных переменных для хранения изменяемого контейнера? Будет ли это правильным решением для описанного процесса и будет ли переход к потокам работать так, чтобы каждый поток мог обновлять необходимые ему переменные contextvars, не затрагивая другие потоки? [/list]
Базовый процесс Объяснение:
Процесс имеет некоторые параметры инициализации, которые должны быть установлены динамически во время выполнения. Например, данные для определенного количества дат (final_lookback) должны быть извлечены из SQL. Количество...
Я пытаюсь измерить время переключения контекста сопрограммы и потока Python, имея два потока, ожидающих события, установленного другим потоком.
Переключение контекста потока занимает 3,87 мкс, что соответствует моим ожиданиям в отношении контекста...
Опробована ли идея использования контекстных переменных для хранения изменяемого контейнера?
В процессе, который имеет множество параметров инициализации. Некоторые из них устанавливаются при запуске из configparser, однако другие изменяются только...
Опробована ли идея использования контекстных переменных для хранения изменяемого контейнера?
В процессе, имеющем множество параметров инициализации. Некоторые из них устанавливаются при запуске из configparser, однако другие изменяются только после...
Я получаю странную ошибку; некоторое время занимаюсь отладкой и думаю, проблема в том, что я передаю файл-призрак с бессмысленного сайта.
Посмотрите, это сообщение об ошибке:
Ошибка: Ошибка: WinSCP.SessionRemoteException: не удалось скопировать...