我正在尝试创建一个简单的程序,它等待使用套接字的文件,然后将其输出返回到另一个线程上的文本字段。
我做了一些研究,我知道线程的基础知识是如何工作的,但我不明白多个线程如何相互连接。
我的问题是WindowManager.addText
函数仅在WindowManager
类本身的事件上更新,而不是从ConnectionManager
类更新。我如何解决这个问题,以便每次在另一个线程上调用WindowManager.addText
时它会立即更新?
我有一个WindowManager
类,它将字符串保存到文本字段(加载GTK):
class WindowManager:
def __init__(self):
#Load the window here, not relevant
self.textBuffer = self.messagePanel.get_buffer()
self.lock = threading.Lock()
def addText(self, text, *args):
self.lock.acquire()
logging.debug('Waiting for lock')
try:
logging.debug('Acquired lock')
self.textBuffer.insert_with_tags_by_name(self.textBuffer.get_end_iter(), text, *args)
finally:
self.lock.release()
现在我在这里也有了一个ConnectionManager
类,它加载了连接线程:
class ConnectionManager:
def __init__(self, windowManager):
self.ping = PingThread(windowManager)
self.ping.setDaemon(True)
self.ping.start()
最后我得到了PingThread
类,它是实际的连接线程,本例中我随机调用该线程:
class PingThread(threading.Thread):
def __init__(self, window, group=None, target=None, name=None, verbose=None):
threading.Thread.__init__(self, group=group, target=target, name=name, verbose=verbose)
self.window = window
def run(self):
while True:
self.window.addText("Test")
time.sleep(random.randrange(1,10))
答案 0 :(得分:1)
在Stack Overflow上搜索之后,我找到了答案。我需要做的就是通过将它放在我的代码的开头来初始化线程:GObject.threads_init()