【问题标题】:Python: How to NOT wait for a thread to finish to carry on?Python:如何不等待线程完成继续?
【发布时间】:2018-05-28 03:46:50
【问题描述】:

所以我有一些代码等待 X 发生,然后创建一个线程并执行 processEmail。

我正在寻找的是一种让代码继续等待 X 的方法,即使 processEmail 正在另一个线程中发生,但目前代码只是等待线程完成,然后再等待 X 再次发生。

if X happens:
    thread = Thread(target = processEmail.main())
    thread.start()

仅供参考,我没有什么需要在代码后面输出 processEmail.main() 的内容,因此我无需等待它的输出。

【问题讨论】:

  • 它不会等待,除非你 join。你一定有一个thread.join() 对吧?您需要向我们展示更多代码。
  • 所以我在thread.start() 之后有一个thread.join(),但我删除了它,因为看起来加入让它等待。但即使没有thread.join(),它仍在等待
  • 你不要在单独的线程中运行processEmail.main(),因为你在线程开始之前调用它。
  • @GennadyKandaurov 我在同一时间发现了这一点。每个人都会偶尔被这个抓住:)

标签: python multithreading


【解决方案1】:

问题是当您将方法作为Thread 的参数传递时,您实际上是在调用您的方法。

所以它执行了,但是在当前线程中,这就是为什么它在工作但它被阻塞(因为它可能返回 None,你不会从 Thread 对象中得到任何错误,它只是阻塞)

删除括号以传递函数对象,而不是调用的结果!

thread = Thread(target = processEmail.main)
thread.start()

注意:像 PyCharm 这样的一些 IDE 会自动为函数名称添加括号。在那种情况下这是一个坏主意:)

【讨论】:

  • 该死的,你完全正确!我怎么错过了,我不知道!!非常感谢吉恩!
猜你喜欢
  • 2013-04-25
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 2014-02-03
相关资源
最近更新 更多