Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

# -*- coding: utf-8 -*- 

# 

# Licensed under the Apache License, Version 2.0 (the "License"); 

# you may not use this file except in compliance with the License. 

# You may obtain a copy of the License at 

# 

# http://www.apache.org/licenses/LICENSE-2.0 

# 

# Unless required by applicable law or agreed to in writing, software 

# distributed under the License is distributed on an "AS IS" BASIS, 

# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 

# See the License for the specific language governing permissions and 

# limitations under the License. 

 

from builtins import str 

import subprocess 

 

from airflow.executors.base_executor import BaseExecutor 

from airflow.utils.state import State 

 

 

class SequentialExecutor(BaseExecutor): 

""" 

This executor will only run one task instance at a time, can be used 

for debugging. It is also the only executor that can be used with sqlite 

since sqlite doesn't support multiple connections. 

 

Since we want airflow to work out of the box, it defaults to this 

SequentialExecutor alongside sqlite as you first install it. 

""" 

def __init__(self): 

super(SequentialExecutor, self).__init__() 

self.commands_to_run = [] 

 

def execute_async(self, key, command, queue=None): 

self.commands_to_run.append((key, command,)) 

 

def sync(self): 

for key, command in self.commands_to_run: 

self.logger.info("Executing command: {}".format(command)) 

 

try: 

subprocess.check_call(command, shell=True) 

self.change_state(key, State.SUCCESS) 

except subprocess.CalledProcessError as e: 

self.change_state(key, State.FAILED) 

self.logger.error("Failed to execute task {}:".format(str(e))) 

 

self.commands_to_run = [] 

 

def end(self): 

self.heartbeat()