Python SDK How to Retrigger Workflow
kpradp opened this issue · comments
// fast api to call workflow
@router.get("/start_workflow")
def start_workflow():
logging.info("Starting workflow runtime...")
with DaprClient() as d:
workflow_runtime = WorkflowRuntime("localhost","3500")
workflow_runtime = WorkflowRuntime()
workflow_runtime.register_workflow(task_chain_workflow)
workflow_runtime.register_activity(step1)
workflow_runtime.register_activity(step2)
workflow_runtime.register_activity(step3)
workflow_runtime.start()
logging.info('starting wfrnt taskchain')
start_resp = d.start_workflow(instance_id= workflow_instance_id ,
workflow_component= workflow_component ,
workflow_name= workflow_name,
input= 33,
workflow_options=workflow_options
)
print(f'start_resp {start_resp.instance_id}')
logger.info(f'start_resp {start_resp.instance_id}')
get_response = d.get_workflow(
instance_id=workflow_instance_id, workflow_component='dapr'
)
print(f'Get response from {workflow_name} after pause call: {get_response.runtime_status}')
sleep(2)
d.purge_workflow(instance_id=workflow_instance_id, workflow_component=workflow_component)
try:
d.get_workflow(instance_id=workflow_instance_id, workflow_component=workflow_component)
except DaprInternalError as err:
if non_existent_id_error in err._message:
print('Instance Successfully Purged')
# d.purge_workflow(instance_id=workflow_instance_id,workflow_component=workflow_component)
sleep(2)
workflow_runtime.shutdown()
return start_resp.instance_id
I am triggering the Workflow from a fast api . It executes , all good.
moreover when i retrigger again its showing the error as
File "/usr/local/lib/python3.10/site-packages/dapr/ext/workflow/workflow_runtime.py", line 80, in register_workflow
workflow-service_1 | raise ValueError(f'Workflow {fn.name} already registered as {alt_name}')
workflow-service_1 | ValueError: Workflow task_chain_workflow already registered as task_chain_workflow
You only need register the workflow
and acitvities
once per lifetime of your process.
I'm not a python dev, but it looks like you may be registering the workflow and activities on every call to your /start_workflow
endpoint?
workflow_runtime.register_workflow(task_chain_workflow)
workflow_runtime.register_activity(step1)
workflow_runtime.register_activity(step2)
workflow_runtime.register_activity(step3)
Thanks my bad i mixed few samples