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