Dash callback stops working when doing ftp from inside of call back

I have a simple app which uses dcc.Interval to get file contents of an FTP directory every 10s and update an html.Div , when I place the ftp connection part inside callback the callback stops returning anything but when ftp is done outside of callback the callback works fine and updates the html.Div.

import dash 
from dash.dependencies import Output, Input
import dash_core_components as dcc 
import dash_html_components as html 
import plotly 
import random 
import plotly.graph_objs as go 
from collections import deque 
from ftplib import FTP 
from time import sleep

#ftp otside the function and function works fine 
#Deactivae this part and activate ftp inside the function , and function 
#stops returning anything and div is not updated every n_interval 
ftp = FTP()
ftp.connect('10.199.44.240', 21)
ftp.login('display')
ftp.cwd('/home/display/test_qc')
print("Connection Established {}".format(ftp.getwelcome()))
direct = 'C:\\Users\\QC\\Desktop\\Gunlink_local\\'

app = dash.Dash(__name__)

app.layout = html.Div([
    html.Div([
        dcc.Interval( 
            id = 'graph-update', 
            interval = 10000, 
            n_intervals = 0
        )
    ]),
    html.Div([
        html.H1(id='print_value', children="Output Value"),
    ])
])


@app.callback( 
    Output('print_value', 'children'), 
    [ Input('graph-update', 'n_intervals') ] 
) 
  
def update_value(n):
    
    # ftp inside the function prevents the function from returning anything
    # Div is not updated every n_interval
    '''
    ftp = FTP()
    ftp.connect('10.199.44.240', 21)
    ftp.login('display')
    ftp.cwd('/home/display/test_qc')
    print("Connection Established {}".format(ftp.getwelcome()))
    a = ftp.nlst()
    '''

    a = ftp.nlst()

    sleep(2)
    print('one loop done ')
    return ("this is  X {}".format(a))


if __name__ == '__main__': 
    app.run_server()