来自Python的管道&x27;s ftplib无阻塞

来自Python的管道&x27;s ftplib无阻塞,python,ftp,stream,pipe,ftplib,Python,Ftp,Stream,Pipe,Ftplib,理想情况下,我要做的是在python中复制这个bash管道(我在这里使用cut来表示数据的一些任意转换。我实际上想使用pandas来实现这一点): 我可以用python编写以下代码,实现相同的目标 # Download the zip file into memory file = io.BytesIO() ftp = ftplib.FTP('hgdownload.cse.ucsc.edu') ftp.retrbinary(f'RETR goldenPath/{args.reference}/d

理想情况下,我要做的是在python中复制这个bash管道(我在这里使用
cut
来表示数据的一些任意转换。我实际上想使用
pandas
来实现这一点):

我可以用python编写以下代码,实现相同的目标

# Download the zip file into memory
file = io.BytesIO()
ftp = ftplib.FTP('hgdownload.cse.ucsc.edu')
ftp.retrbinary(f'RETR goldenPath/{args.reference}/database/refFlat.txt.gz', file.write)

# Unzip the gzip file
table = gzip.GzipFile(fileobj=file)

# Read into pandas
df = pd.read_csv(table)
但是,
ftp.retrbinary()
调用会阻塞,并等待整个下载过程。我想要的是有一个长的二进制流,以FTP文件作为源,以
gunzip
作为过滤器,以
pd.read\u csv()
作为接收器,所有这些流都同时处理数据,就像在我的bash管道中一样。有没有办法阻止
retrbinary()
阻塞

我意识到这可能是不可能的,因为python不能使用多个线程。这是真的吗?如果是这样,我可以使用
多处理
异步
或其他一些语言功能来实现这个同步管道吗


编辑:将
storbinary
更改为
retrbinary
,这是一个打字错误,问题仍然存在

您应该能够将文件直接下载到
gzip文件

gzipfile = gzip.GzipFile()
ftp.retrbinary(f'RETR goldenPath/{args.reference}/database/refFlat.txt.gz', gzipfile.write)

Python完全可以使用多个线程。你想到的是吉尔,这是不同的。
gzipfile = gzip.GzipFile()
ftp.retrbinary(f'RETR goldenPath/{args.reference}/database/refFlat.txt.gz', gzipfile.write)