【发布时间】:2014-11-18 22:42:21
【问题描述】:
我的程序循环通过这个返回服务器延迟的子进程。
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
latency = subprocess.Popen(["ping.exe", "141.101.115.212"],
stdout=subprocess.PIPE,
startupinfo=startupinfo)
latency = str(x.communicate()[0])
问题是程序会在循环中暂停以允许子进程完成。有没有办法跳过这个子进程,直到它完成,所以我可以继续循环?
编辑
我不能只等待子进程完成的原因是因为我需要能够单击并拖动显示延迟的窗口。如果子进程没有完成,窗口将不会移动。这会产生滞后效应。
class WindowDraggable():
def __init__(self, label):
self.label = label
label.bind('<ButtonPress-1>', self.StartMove)
label.bind('<ButtonRelease-1>', self.StopMove)
label.bind('<B1-Motion>', self.OnMotion)
def StartMove(self, event):
self.x = event.x
self.y = event.y
def StopMove(self, event):
self.x = None
self.y = None
def OnMotion(self, event):
x = (event.x_root - self.x - self.label.winfo_rootx() + self.label.winfo_rootx())
y = (event.y_root - self.y - self.label.winfo_rooty() + self.label.winfo_rooty())
root.geometry("+%s+%s" % (x, y))
【问题讨论】:
-
结果是否与您的其余代码相关?
-
@PadraicCunningham 我正在循环浏览这段代码,以便刷新我在窗口上显示的延迟。问题是当我的程序正在等待子进程完成时,我无法拖动窗口。子流程正在产生滞后效应。你明白我的意思吗?
-
我想是的,ping 的结果稍后会在您的程序中用作输出?
-
@PadraicCunningham 窗口上显示的 ping 会在子进程提供新的 ping 后立即刷新。
-
使用线程与子进程通信,使用队列将结果数据传递给主线程。 @PadraicCunningham 我怀疑你已经理解了这个问题,OP 正在阻止他的 GUI 线程,因此他的窗口变得没有响应。
标签: python python-3.x