I had a similar problem.
Every time after calling ftp.storbinary, it blocked the execution, and locked the uploaded file on my server. However when I killed the pythonista app, the lock got removed, and I found my file to be uploaded successfully.
My solution to this was to set the connection timeout to 5 seconds, so it threw an exception after every storbinary call after 5 seconds.
Since I does not plan to work with big files, I can safely assume that my file got successfully uploaded by then.
This approach can be improved however, for example one can define a callback for storbinary, which gets called after every succesful block upload, so it can be verified whether the process finished or not.
import socket
socket.setdefaulttimeout(5.0)
or in the ftp objects contructor
ftp = FTP(...,timeout=5.0)