繁体   English   中英

pandas read_csv 方法忙状态

[英]pandas read_csv method busy status

我正在尝试在使用 Python Pandas read_csv 方法从 csv 文件上传数据时实现“忙碌”状态指示器。 这在上传大型 csv 文件时特别有用,这些文件使终端保持忙碌,直到数据加载到 memory。但是,我无法获得任何简单的解决方案来处理 Pandas。一个简单的 cursor 指示器,例如我使用的这个指示器将是如果它可以集成到 read_csv 方法中,则非常有用。

import itertools
import sys

busy = itertools.cycle([' \ ', ' / '])
sys.stdout.write(next(busy))
sys.stdout.flush()
sys.stdout.write('\b\b\b')

对 pandas 中的 read_csv 方法实施此类解决方案有何建议?

您可以使用某种“监视器”线程。 是这样的:

import itertools
from threading import Thread
import time
import sys

BUSY = True

def busy():
    b = itertools.cycle([' \ ', ' / '])
    while BUSY:
        sys.stdout.write(next(b))
        sys.stdout.flush()
        sys.stdout.write('\b\b\b')
        time.sleep(0.2)

t = Thread(target=busy)
t.start()
# sleep here emulates your time-consuming operation
time.sleep(5)

BUSY = False
t.join()

您也可以考虑使用事件。 我仅将此作为一种非常简单的方法提供。

编辑:这是一种多处理方法:

from multiprocessing import Pool, Manager, freeze_support
import sys
import time

def busy(v):
    flash = [' | ', ' / ', ' - ',  ' \\ ', ' | ', ' / ', ' - ', ' \\ ']
    fi = 0
    while v.value > 0:
        sys.stdout.write(flash[fi])
        sys.stdout.flush()
        sys.stdout.write('\b\b\b')
        time.sleep(0.25)
        fi = (fi + 1) % len(flash)

def main():
    with Manager() as manager:
        v = manager.Value('i', 1)
        with Pool() as pool:
            ar = pool.apply_async(busy, [v])
            time.sleep(5) # emulate some time-consuming process
            v.value = 0
            ar.get()
 

if __name__ == '__main__':
    freeze_support()
    main()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM