线程应用程序时随机发送 PyQt 垃圾邮件“选择:无效参数”
Posted
技术标签:
【中文标题】线程应用程序时随机发送 PyQt 垃圾邮件“选择:无效参数”【英文标题】:PyQt spamming "select: Invalid argument" randomly when threading application 【发布时间】:2013-01-16 18:51:35 【问题描述】:我正在使用 PyQT(Qt 版本:4.8.3,PyQt 版本 4.9.4)创建大量页面的屏幕截图。我使用线程策略来提高性能。
它在几秒钟内(大约 30 秒)就像一个魅力一样工作,然后突然间,该应用程序只是向我的终端发送了一条奇怪的“select: Invalid argument”消息。
这肯定不是我的调试消息之一。但就像这真的是随机的,我无法真正挖掘发生这种情况的位置/原因。
如果这有帮助,我生成的线程越多,它发生的速度就越快。这可能是内存问题吗?
我不确定这是否有用,但这是我正在使用的生成方法:
def spawn(self):
worker = Worker() # this is a QObject
thread = QThread()
# When done, respawn a new thread
self.connect(worker, SIGNAL("done()"), self.spawn)
# And stop the related thread
self.connect(worker, SIGNAL("done()"), thread.quit)
self.threadsPool.append(thread) # Keep-alive
self.workersPool.append(worker) # Keep-alive
worker.moveToThread(thread)
thread.start()
worker.start("myfancydomain.com")
感谢您的帮助!
【问题讨论】:
“我生成的线程越多,它发生的速度越快”这听起来像是一种竞争条件,或者线程以非线程安全的方式使用一些共享资源,如网络连接。我怀疑问题的原因在于您发布的代码中,但老实说,我不知道如何正确诊断此问题。也许尝试使用错误消息获取堆栈跟踪会有所帮助。 【参考方案1】:这很可能与线程被删除后的访问权限有关。
我认为您的threadsPool 正在尝试在您的线程退出或删除后访问您的线程。在某个地方,threadsPool(或一些类似容器)的槽或函数调用正在访问错误的指针,例如已删除的线程。
为了验证这是否是问题所在,在另一个线程或循环中,去查询threadsPool 中的线程数以及关于每个线程的一些信息。我敢打赌,在第一个线程退出后,它会在使用指向该线程的指针时崩溃。
【讨论】:
以上是关于线程应用程序时随机发送 PyQt 垃圾邮件“选择:无效参数”的主要内容,如果未能解决你的问题,请参考以下文章
使用 Zend_mail 时,我的电子邮件似乎被视为垃圾邮件,通过 Outlook 发送而没有?