Я хочу сохранить некоторую информацию в коде python, который является частью моего файла snake, и сделать эту информацию доступной для кода python в каждом экземпляре, который snakemake создает при запуске рабочего процесса. Но отдельный прогон рабочего процесса должен иметь свой отдельный экземпляр информации.
Например, скажем, я должен был создать UUID в моем коде Python, а затем использовать его в коде Python. Но я хочу, чтобы UUID был одинаковым во всех запущенных экземплярах рабочего процесса. Вместо этого каждый раз при запуске экземпляра создается новый UUID.
Если я запускаю snakemake дважды одновременно, я бы хотел, чтобы каждый из двух прогонов создавал свой собственный UUID, но в каждом прогоне все экземпляры, созданные прогоном, будут использовать один и тот же UUID. Как это сделать? Есть ли где-нибудь в объекте змеиного идентификатора идентификатор, который остается одним и тем же в течение одного запуска для всех экземпляров, но изменяется от запуска к запуску?
Вот пример, который завершается с ошибкой «Нет правил для создания»:
import uuid
ID = str(uuid.uuid4())
print("ID:", ID)
rule all:
output: ID
run: print("Hello world")
Если вместо 'run' он использует 'shell', он работает нормально, поэтому я предполагаю, что Snakemake повторно запускает код snakefile при выполнении части правила "run" правила. Как это можно изменить, чтобы сохранить первое значение UUID вместо генерации второго? Кроме того, почему идентификатор, указанный для вывода в правиле, не фиксируется при первой обработке правила, не требуя повторного вызова кода Python? Поскольку он работает с 'shell', второй вызов не нужен специально для обработки оператора "output".