def run_task_function(client: NotificationClient): with af.global_config_file(workflow_config_file()): with af.config('task_2'): executor_1 = af.user_define_operation( af.PythonObjectExecutor(SimpleExecutor())) with af.config('task_5'): executor_2 = af.user_define_operation( af.PythonObjectExecutor(SimpleExecutor())) af.user_define_control_dependency(src=executor_2, dependency=executor_1, namespace='test', event_key='key_1', event_value='value_1', sender='*') workflow_info = af.workflow_operation.submit_workflow( workflow_name) af.workflow_operation.start_new_workflow_execution(workflow_name) flag = True while True: with create_session() as session: tes = session.query(TaskExecution).filter( TaskExecution.dag_id == 'test_project.test_workflow', TaskExecution.task_id == 'task_2').all() if 1 == len(tes) and flag: client.send_event( BaseEvent(key='key_1', value='value_1')) flag = False dag_run = session.query(DagRun).filter( DagRun.dag_id == 'test_project.test_workflow').first() if dag_run is not None and dag_run.state in State.finished: break else: time.sleep(1)
def run_task_function(client: NotificationClient): with af.global_config_file(workflow_config_file()): with af.config('task_2'): executor_1 = af.user_define_operation( af.PythonObjectExecutor( SendExecutor(sender='task_2', key='key_1', value='value_1', event_type='UNDEFINED', port=server_port()))) with af.config('task_5'): executor_2 = af.user_define_operation( af.PythonObjectExecutor(SimpleExecutor())) af.user_define_control_dependency(src=executor_2, dependency=executor_1, event_key='key_1', event_value='value_1') workflow_info = af.workflow_operation.submit_workflow( workflow_name) af.workflow_operation.start_new_workflow_execution(workflow_name) while True: with create_session() as session: dag_run = session.query(DagRun).filter( DagRun.dag_id == 'test_project.test_workflow').first() if dag_run is not None and dag_run.state in State.finished: break else: time.sleep(1)
def build_workflow(): with af.global_config_file(project_path + '/resources/workflow_config.yaml'): with af.config('job_1'): op_1 = af.user_define_operation( af.PythonObjectExecutor(StreamPrintHelloExecutor('job_1'))) with af.config('job_2'): op_2 = af.user_define_operation( af.PythonObjectExecutor( SendEventExecutor(key='key_1', value='value_1'))) with af.config('job_3'): op_3 = af.user_define_operation( af.PythonObjectExecutor( SendEventExecutor(key='key_2', value='value_2'))) af.user_define_control_dependency(op_1, op_2, event_key='key_1', event_type='UNDEFINED', event_value="value_1") af.user_define_control_dependency(op_1, op_3, event_key='key_2', event_type='UNDEFINED', event_value="value_2")
def test_user_define_control_dependency(self): print(sys._getframe().f_code.co_name) trigger = af.external_trigger(name='stream_trigger') job_config = af.BaseJobConfig('local', 'cmd_line') job_config.job_name = 'test_cmd' with af.config(job_config): cmd_executor = af.user_define_operation( output_num=0, executor=CmdExecutor( cmd_line="echo 'hello world' && sleep {}".format(1))) af.user_define_control_dependency( src=cmd_executor, dependency=trigger, event_key='key', event_value='value', event_type='name', condition=MetCondition.NECESSARY, action=TaskAction.START, life=EventLife.ONCE, value_condition=MetValueCondition.UPDATE) workflow_id = af.submit_ai_flow() af.get_ai_flow_client().publish_event('key', 'value1', 'name') time.sleep(5) af.get_ai_flow_client().publish_event('key', 'value2', 'name') time.sleep(10) af.stop_execution_by_id(workflow_id) res = af.get_ai_flow_client().list_job(5, 0) self.assertEqual(3, len(res))
def build_workflow(): with af.global_config_file(project_path + '/resources/workflow_config.yaml'): with af.config('job_1'): op_1 = af.user_define_operation( af.PythonObjectExecutor(PrintHelloExecutor('job_1'))) with af.config('job_2'): op_2 = af.user_define_operation( af.PythonObjectExecutor( SendEventExecutor(key='key_1', value='value_1', num=3, post_time=20))) af.user_define_control_dependency(op_1, op_2, event_key='key_1', event_type='UNDEFINED', event_value="value_1", action=TaskAction.RESTART)