python - pandas read_csv 方法繁忙状态
问题描述
在使用 Python Pandas read_csv 方法从 csv 文件上传数据时,我正在尝试实现“忙碌”状态指示器。这在上传大型 csv 文件时特别有用,这些文件会使终端保持忙碌,直到数据加载到内存中。但是,我找不到任何简单的解决方案来使用 Pandas。如果可以将其集成到 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()
推荐阅读
- python - python - 如何在Python中使用日期时间类型的列在图中显示日期而不是月份?
- xcode - Xcode 12.4 链接错误:找不到库
- schema - NHS 数据仓库
- reactjs - 为什么异步函数中的多个 setState 调用会导致多次渲染?
- firebase - 仅获取 FireBase 集合中的文档,其 id 与单独集合中的文档匹配
- vue.js - 使用“this”引用属性时,Vue 中的 Typescript 不安全成员访问错误。
- mongodb - MongoDB聚合查询优化:$match、$lookup和double $unwind
- element - 在具有多个选项卡的页面中查找元素
- workbox - 使用工作箱中的 StaleWhileRevalidate 和 BroadcastUpdatePlugin,如何通知客户端没有变化?
- haskell - Haskell 使用 UArray 实现数据类型的 Show