我在PyQT4程序中有以下代码用于click处理程序:
def click_btn_get_info(self):
task = self.window.le_task.text()
self.statusBar().showMessage('Getting task info...')
def thread_routine(task_id):
order = self.ae.get_task_info(task_id)
if order:
info_str = "Customer: {email}\nTitle: {title}".format(**order)
self.window.lbl_order_info.setText(info_str)
self.statusBar().showMessage('Done')
else:
self.statusBar().showMessage('Authentication: failed!')
thread = threading.Thread(target=thread_routine, args=(task,))
thread.start()
Run Code Online (Sandbox Code Playgroud)
在线程中使用函数声明函数是一个好习惯吗?
总的来说,是的,这是完全合理的.但是,创建单独方法(或者,对于顶级代码,单独的函数)的替代方案也是完全合理的.创建Thread子类也是如此.所以,没有规则说要总是做三个中的一个; 有不同的情况,每一个似乎比其他情况更合理,但这些情况之间有重叠,所以它通常是一个判断调用.
正如Maxime指出的那样,您可能希望使用Qt的线程,而不是本机Python线程.特别是因为您想要在GUI对象上调用方法.Qt文档文章中的线程,事件和QObject在Qt文档中为您提供了概述(尽管从C++,而不是Python,观点).如果你使用的是a QThread而不是a threading.Thread,那么使用OO方法更常见 - 定义子类QThread并覆盖其run方法而不是定义函数,这使得你的问题没有实际意义.
但是如果你坚持使用Python线程,这就是我的决定.
专业单独的方法:
self.专业本地功能:
我可能会把它作为一种方法,但我不会抱怨别人的代码使它成为一个本地函数.
在不同的情况下 - 例如,如果线程需要访问没有业务属于对象的局部变量,或者如果它是一个简单的函数,我可以写为内联lambda,或者如果这是一个顶级函数分享全局而不是方法共享self,我会走向另一个方向.
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |