后台:我写了一个简单的RUMPS / PyObjC应用程序,它在各个点发出HTTP请求并弹出系统警报对话框。大多数HTTP请求都是线程化的,以避免阻止主执行。
查询:在PyObjC中你不应该在后台线程中创建警告对话框(只有主进程可以安全地执行此操作)所以我想知道是否有一个合理的模式我可以使用允许子线程与父进行通信,以通知它应该创建一个警告对话框。
举个例子:
popAlert()
方法,调用PyObjC函数创建警告对话框。popAlert()
。目前我让子线程创建了警告对话框,这在PyObjC中显然是不安全的。
我对线程/多处理相当新,我到目前为止看到的线程间通信示例似乎主要涉及子线程从类似队列的机制接收消息,父节点可选地阻塞,直到队列为空。我还没有看到任何迹象表明父母是否可能以我描述的方式回应来自子线程的消息。
如果这样做需要重新架构,那也没关系 - 我不会拘泥于任何特定的多处理方法。
非常感谢任何建议。如果我能提供更多细节,请告诉我。非常感谢您的阅读。
答案 0 :(得分:2)
看看pyobjc_performSelectorOnMainThread。它可能是你需要的。这是一个人为的用例:
class MyClass (NSObject):
def divideByZero_(self, arg):
return arg/0
def doit(self):
try:
result = self.performSelectorOnMainThread_withObject_(
'divideByZero:', 55)
print result
except:
print "Division failed"
您可以在PyObjC example app中更具体地使用它。特别查看WSTConnectionWindowControllerClass.py。
答案 1 :(得分:1)
您还可以使用队列将消息从子节点传输到父节点。这里的问题是,你需要在主线程中有一个消息循环,它定期读取消息队列以显示消息。