在python中生成包含套接字连接的QThread
我目前正在尝试实现一个包含套接字连接的QThread。套接字连接重复运行(1:)以检查接收到的新数据。一旦接收到该数据,它就应该发出一个调用函数的信号,并将接收到的数据提供给函数 我把插座连接好了。当我单独运行函数时,它会等待数据并在新数据到来时打印。然而,因为我试图用Qt构建一个GUI,所以我必须把它放在自己的线程中,这样应用程序才能继续运行 所以为了使它线程化,我实现了一个GenericThread类,它接受任何函数并在线程内运行它。我的MainWindow类连接套接字信号,实例化一个GenericThread,然后启动它。但这会导致我的应用程序挂起。以下是相关代码: 插座连接 生成远程线程。请注意,两个print语句都被执行在python中生成包含套接字连接的QThread,python,multithreading,qt,sockets,pyqt,Python,Multithreading,Qt,Sockets,Pyqt,我目前正在尝试实现一个包含套接字连接的QThread。套接字连接重复运行(1:)以检查接收到的新数据。一旦接收到该数据,它就应该发出一个调用函数的信号,并将接收到的数据提供给函数 我把插座连接好了。当我单独运行函数时,它会等待数据并在新数据到来时打印。然而,因为我试图用Qt构建一个GUI,所以我必须把它放在自己的线程中,这样应用程序才能继续运行 所以为了使它线程化,我实现了一个GenericThread类,它接受任何函数并在线程内运行它。我的MainWindow类连接套接字信号,实例化一个Gen
我不熟悉套接字和线程,所以我可能在某个地方犯了一个非常愚蠢的错误。如果没有进一步的参考,线程可能会被破坏
尝试使用
self.thread
而不仅仅是thread
如果没有进一步的引用,线程可能会被销毁。尝试使用self.thread
intead of justthread
@alexisdm:谢谢,这似乎可以解决问题。虽然仍然存在一些问题,但我想我现在可以找到导致这些问题的原因。
def remoteConn(self, HOST='my.server', PORT=25562):
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
newLinesRaw = ''
while 1:
newData = s.recv(1024)
if newData:
print '<rawData>\n', newData, '\n</newData>\n'
newLinesRaw += newData
else:
if newLinesRaw:
newLines = newLinesRaw.split('\n')
print '\nNew Lines:\n', newLines
self.emit(QtCore.SIGNAL('newRemoteLines'), newLines)
newLinesRaw=''
else:
time.sleep(.1)
s.close()
class GenericThread(QtCore.QThread):
def __init__(self, function, *args, **kwargs):
QtCore.QThread.__init__(self)
self.function = function
self.args = args
self.kwargs = kwargs
def __del__(self):
self.wait()
def run(self):
if self.args and self.kwargs:
self.function(*self.args,**self.kwargs)
elif self.args and not self.kwargs:
self.function(*self.args)
elif not self.args and self.kwargs:
self.function(**self.kwargs)
else:
self.function()
return
print 'spawning remote thread'
self.connect(self, QtCore.SIGNAL('newRemoteLines'), self.routeServerLines)
thread = GenericThread(self.remoteConn)
thread.start()
print 'thread started'