python-3.x - Python 'progress' 模块在函数中不显示来自 os.fork() 的微调器
问题描述
我想使用进度模块,但是,似乎微调器在函数内的 os.fork() 内不起作用。例如:
import sys, time, signal, os
from progress.spinner import MoonSpinner
def spinner_func():
spinner = MoonSpinner('this is a test')
pid = os.fork()
if pid == 0:
while True:
time.sleep(0.1)
spinner.next()
exit()
# Some long-running, blocking action would normally go here
time.sleep(20)
os.kill(pid, signal.SIGTERM)
spinner.finish()
print('Done!!')
相同的代码在函数之外工作,因为它显示微调器直到执行结束。我不确定如何在函数中使用这个模块,有什么想法吗?
解决方案
'spinner' 变量必须在子进程内部赋值,并且可以通过 multiprocessing.Queue() 发送给父进程
例如:
import sys, time, signal, os, multiprocessing
from progress.spinner import MoonSpinner
def spinner_func():
q = multiprocessing.Queue()
pid = os.fork()
if pid == 0:
spinner = MoonSpinner('this is a test') # <<--notify
q.put(spinner)
while True:
time.sleep(0.1)
spinner.next()
exit()
time.sleep(20)
os.kill(pid, signal.SIGTERM)
spinner = q.get()
spinner.finish()
print('Done!!')
spinner_func()
推荐阅读
- c - recvmsg() 返回“资源暂时不可用”
- javascript - 如何在 javascript 中将文本框设置为 eval()
- gmlib - GMLib MegaDemo.exe 无法加载
- java - 如何将可重用功能移动到泛型类并从那里调用另一个活动?
- algorithm - 求解词向量最优聚类的算法
- android - Kivy FileChooser 在某些 android 手机上不能作为 apk 工作,我该如何解决?
- django - Django 2.0:必须使用对象 pk 或 slug 调用通用详细视图
- javascript - VueJs 数组替换 v-for 如何使其工作
- javascript - Graphql 查询参数不起作用
- yaml - YAML:键的锚点?