线程应用程序时随机发送 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 发送而没有?

mailbox邮件队列被大量垃圾邮件堆积

让用户发送 HTML 电子邮件而不会有被标记为垃圾邮件的风险

iOS 推送通知垃圾邮件

限制发送推送通知(防止垃圾邮件) - GCM

邮箱怎么群发邮件?