프로세스 생성은(는) 무엇을 하나요?
모든 경로는 리포지토리 루트를 기준으로 합니다. 패키지는 process_package/에 있습니다.
부모 클래스 작동 방식
process_package/toy_process/process.py는 Process를 정의합니다:
__init__(**overrides)는self.params = {**self.set_parameters(), **overrides}를 설정한 후self.steps = self.set_steps()를 호출합니다.set_parameters()와set_steps()는 추상 메서드입니다. 이 두 메서드 중 하나라도 구현하지 않은 하위 클래스는 인스턴스화할 수 없습니다.run(context=None)은self.steps를 순서대로 반복하며 실행합니다:Process인스턴스 →step.run(context), 중첩되며 동일한 context 사전을 사용합니다.- 다른 호출 가능한 객체 →
step(context) - 그 외 →
TypeError
run은 context 사전을 반환하고 들여쓰기된 추적 정보를 출력합니다.
toy_process/를 수정하거나 하위 클래스에서 __init__ 또는 run을 오버라이드하지 마십시오.
하위 클래스 규칙
from toy_process import Process로 임포트하고 상속받습니다.set_parameters(self)는 기본값의dict를 반환합니다. 기본값이 없으면{}를 사용하십시오.set_steps(self)는list를 반환합니다. 각 항목은 다음 중 하나여야 합니다:- 바인딩된 메서드:
self.count_words, 괄호 없이 Process인스턴스:CleanText(lowercase=self.params["lowercase"])
- 바인딩된 메서드:
- 각 단계 메서드는 시그니처
def name(self, context):를 가집니다.- 설정은
self.params["..."]에서 읽습니다. - 데이터는
context["..."]에서 읽고 씁니다. - 아무것도 반환하지 않습니다. 반환 값은 무시됩니다.
- 설정은
- 사용하는 클래스 위에 하위 프로세스 클래스를 정의하거나 임포트하십시오.
템플릿
"""프로세스가 수행하는 작업을 한 줄로 설명.
process_package/에서 실행:
python -m examples.<module_name>
"""
from toy_process import Process
class SubTask(Process):
def set_parameters(self):
return {"option": True}
def set_steps(self):
return [self.do_part]
def do_part(self, context):
if self.params["option"]:
context["value"] = context["value"] * 2
class MainTask(Process):
def set_parameters(self):
return {"start": 1, "option": True}
def set_steps(self):
return [
self.load,
SubTask(option=self.params["option"]), # 중첩된 하위 프로세스
self.finish,
]
def load(self, context):
context["value"] = self.params["start"]
def finish(self, context):
context["result"] = f"value is {context['value']}"
if __name__ == "__main__":
print(MainTask(start=5).run()["result"])
생성할 파일
process_package/examples/<module_name>.py: 템플릿을 기반으로 한 프로세스.process_package/tests/test_<module_name>.py:.run()을 호출하고 반환된 context의 키를 검증하는unittest테스트. 매개변수 오버라이드가 결과를 변경하는지도 확인하십시오.
import unittest
from examples.<module_name> import MainTask
class MainTaskTests(unittest.TestCase):
def test_run(self):
self.assertEqual(MainTask(start=5).run()["result"], "value is 10")
def test_parameter_override(self):
self.assertEqual(MainTask(start=5, option=False).run()["result"], "value is 5")
if __name__ == "__main__":
unittest.main()
그런 다음 run-process 스킬로 검증하십시오. 완전한 작동 예제는 process_package/examples/word_report.py에 있습니다.