我在Pycharm中编写一个简单的Python程序,将csv数据库导入Mongodb,导入时显示进度条,导入所有文档后,运行其他一些函数......
由于我使用子进程指令来运行mongoimport命令,我必须做一些等待在mongimport之前不执行的其他函数。
问题出现了:如果我使用subprocess.wait(),进度条会停止更新,直到mongoimport结束,否则如果我使用sleep(),同样的情况会发生...
所以我尝试运行mongoimport子进程和在同一进程中更新进度条的函数。然后我使用“空”while循环检查是否process.is_alive()所以主程序没有,而进程导入和更新进度条...但它在预期之前退出循环!早在mongoimport之前,进度条功能都没有结束。
以下是代码:
def mainFunction(self):
process1 = Process(target=self.execc())
process1.start()
while process1.is_alive():
print("IM IN PROCESS 1")
# THIS IS PRINTED BEFORE "execc()" ENDS
print("IM OUT!")
# other functions
self.toISO()
self.createFrec()
self.sort()
def execc(self):
p = subprocess.Popen(['mongoimport', '-d', 'tfg', '-c', 'myCol', '--type', 'csv', '--file', './myFile.csv', '--headerline'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# shows and updates the progress bar while mongoimpor
self.showProgress()
# RECURSIVE FUNCTION
# updates the progress bar every 200ms
def showProgress(self):
bytes = self.db.command('collStats', self.coll_name.get())
self.pBar['value'] = bytes['size']
if bytes['size'] < self.maxbytes:
self.pBar.after(200, self.showProgress)
答案 0 :(得分:0)
我认为你不需要多处理方法来处理这种情况。
相反,您只需使用(lldb) po window.debugDescription
"Optional(<_UIInteractiveHighlightEffectWindow: 0x106325960; frame = (0 0; 667 375); hidden = YES; gestureRecognizers = <NSArray: 0x1c4444a40>; layer = <UIWindowLayer: 0x1c4235c60>>)"
(lldb) po self.window.debugDescription
"Optional(<UIWindow: 0x106409840; frame = (0 0; 667 375); autoresize = W+H; gestureRecognizers = <NSArray: 0x1c0054c40>; animations = { position=<CABasicAnimation: 0x1c02323c0>; bounds.origin=<CABasicAnimation: 0x1c0232480>; bounds.size=<CABasicAnimation: 0x1c02324a0>; }; layer = <UIWindowLayer: 0x1c0223a00>>)"
来检查子进程是否已终止。我觉得这样的事情应该有用
Popen.poll