相关疑难解决方法(0)

覆盖python threading.Thread.run()

鉴于Python文档Thread.run():

您可以在子类中覆盖此方法.标准的run()方法调用传递给对象构造函数的可调用对象作为目标参数(如果有),分别使用args和kwargs参数中的顺序和关键字参数.

我构造了以下代码:

class DestinationThread(threading.Thread):
    def run(self, name, config):
        print 'In thread'

thread = DestinationThread(args = (destination_name, destination_config))
thread.start()
Run Code Online (Sandbox Code Playgroud)

但是当我执行它时,我收到以下错误:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 522, in __bootstrap_inner
    self.run()
TypeError: run() takes exactly 3 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

我似乎错过了一些明显的东西,但我看到的各种例子都与这种方法有关.最终我试图将字符串和字典传递给线程,如果构造函数不是正确的方法,而是在启动线程之前创建一个新函数来设置值,我对此持开放态度.

有关如何最好地完成此任务的任何建议?

python multithreading

37
推荐指数
4
解决办法
6万
查看次数

在长时间运行的过程中阻止pygtk GUI锁定

我有一个过程需要一段时间(可能一两分钟)才能完成.当我从pygtk GUI调用此窗口时,窗口会在大约10秒后锁定(变暗并阻止用户操作).

我想阻止这种情况发生,但我不确定如何.我认为多线程将是答案,但似乎并没有起作用.我尝试了两种在网上找到的不同方法.首先,我修改了这个常见问题解答,以便进行长时间运行.其次我尝试使用threading.Thread直接像在这个答案,但也锁定.

我的两个样本如下.我是多线程的新手,所以也许这不是我正在寻找的解决方案.我基本上只是试图阻止GUI锁定,所以我可以使用进度条更新并让用户使用取消按钮.

#Sample 1
import threading
import time
import gobject
import gtk

gobject.threads_init()

class MyThread(threading.Thread):
    def __init__(self, label, button):
        super(MyThread, self).__init__()
        self.label = label
        self.button = button
        self.counter = 0
        button.connect("clicked", self.on_button_click)
        self.quit = False

    def update_label(self, counter):
        self.label.set_text("Counter: %i" % counter)
        time.sleep(20)
        return False

    def on_button_click(self, widget):
        self.counter += 1
        gobject.idle_add(self.update_label, self.counter)

window = gtk.Window()
label = gtk.Label()
box = gtk.VBox()
button = gtk.Button("Test")
box.pack_start(label)
box.pack_start(button)
window.add(box)
window.show_all()
window.connect("destroy", lambda _: gtk.main_quit())
thread …
Run Code Online (Sandbox Code Playgroud)

python multithreading pygtk

5
推荐指数
1
解决办法
3342
查看次数

标签 统计

multithreading ×2

python ×2

pygtk ×1