使用Queue在线程之间进行通信和同步,每个线程都“拥有”并专门与不方便共享的资源进行交互。
在只有主线程才能真正处理GUI的GUI工具箱中,主线程应随心所欲- 设置并启动执行实际工作的线程,然后仅执行GUI工作,使用Queue与其他线程进行通信,或从其他线程进行通信。
对于(1),当计数线程有更新时,应将put
其更新到主线程正在等待的队列;当您的主线程在该队列上收到适当的消息时,它将更新进度对话框。
对于(2),计数线程发送“让用户打平领带”请求,主线程获取该请求并作出适当响应,然后在单独的Queue上发回分辨率。
因此,通常有两种通信方式:一种不需要响应,而另一种则需要。对于前一种,只需将通知放在适当的队列上,然后继续进行即可- 它将在适当的时候进行处理。对于后一种,我最喜欢的习惯用法是将适当的队列放入一对(request,response_queue)。如果相同的请求不同,有些请求需要响应而另一些则不需要,则在不需要响应时排队(请求,无)(和(请求,q)在需要响应时q是队列),这很容易,以及一般用语。