这是我的代码:
func mapView(_ didSelectmapView: MKMapView, didSelect view: MKAnnotationView) {
print("Annotation selected")
if let drawer = self.parent as? PulleyViewController {
let drawerContent = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NewDrawerViewController")
drawer.setDrawerContentViewController(controller: drawerContent, animated: false)
drawer.setDrawerPosition(position: PulleyPosition.partiallyRevealed, animated: false)
}
}
这在一个非常小的目录上运行。我不明白为什么?
答案 0 :(得分:1)
<div id="red">Red</div>
<div id="green">Green</div>
进程最终将被阻塞,因为它正在等待其wget
或stdout
管道变为可写,如果它写入足以填充该管道的内核缓冲区。默认情况下,这就是管道在Unix中的工作方式:编写器进程将减慢以匹配读取器进程的速度,如果读取器停止读取,则编写器停止写入(如果读取器退出,则编写器被杀死!)
有几种不同的方法可以解决这个问题。
要防止缓冲区变满,请同时阅读stderr
和p.stdout
。在p.stderr
stdout
被wget
阻止时,请注意不要阻止stderr
,反之亦然...您必须同时从两者中读取。这就是p.communicate()
内部工作的方式。这是最复杂的解决方案,但如果您查看Popen._communicate
中subprocess.py
的源代码,您就会看到它应该如何工作。
从代码中删除while p.poll() is None
循环。
不要将wget
重定向到管道,将其重定向到其他内容,例如常规文件或/dev/null
。