gpt4 book ai didi

python - 在线程函数中声明函数是好的编程风格吗?

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:16 25 4
gpt4 key购买 nike

我的 PyQT4 程序中有以下点击处理程序代码:

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()

在函数中声明函数以用于线程是一种好习惯吗?

最佳答案

总的来说,是的,这是完全合理的。但是,创建一个单独的方法(或者,对于顶层代码,一个单独的函数)的替代方案也是完全合理的。创建 Thread 也是如此子类。所以,没有规则说总是做三者之一;在不同的情况下,每个情况似乎都比其他情况更合理,但这些情况之间存在重叠,因此通常需要判断。

正如 Maxime 所指出的,您可能希望使用 Qt 的线程,而不是原生的 Python 线程。特别是当您想在 GUI 对象上调用方法时。 Qt 文档文章 Threads, Events and QObjects在 Qt 文档中为您提供了一个概述(尽管是从 C++ 而非 Python 的角度来看)。如果您使用的是 QThread而不是 threading.Thread , 使用 OO 方法更为常见——定义 QThread 的子类并覆盖它的 run方法而不是定义一个函数,这使你的问题没有实际意义。

但如果您坚持使用 Python 线程,我会这样决定。

专业分离法:

  • 您是在类方法中执行此操作,而不是在函数中执行此操作,并且您想要与新线程共享的唯一状态是 self .
  • 重要的代码,比它嵌入的函数要长。

Pro本地功能:

  • 非常具体的信息按钮回调;没有其他人会愿意调用它。

我可能会把它变成一个方法,但我不会提示别人的代码把它变成了一个本地函数。

在不同的情况下——例如,如果线程需要访问一个局部变量,而该局部变量与对象的一部分无关,或者如果它是一个微不足道的函数,我可以将其编写为内联 lambda,或者如果这是一个 top级函数共享全局变量而不是方法共享 self ,我会去另一个方向。

关于python - 在线程函数中声明函数是好的编程风格吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20008803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com