【问题标题】:Python : How to execute a thread and go back to main threadPython:如何执行线程并返回主线程
【发布时间】:2014-07-18 07:21:12
【问题描述】:

我正在尝试在 Python 中发出异步 HTTP 请求。我使用 requests - 这非常好 - 它不提供异步可能性。

每次我想发送一个 HTTP 请求时,我都会启动一个新线程。它正确执行并且应该在主线程中返回响应,以便我可以执行回调方法。

我目前正在使用这样的线程模块:

class MyConnection
    # ...
    def make_request(self):
        # Use requests lib here
        response = requests.request(...)
        self.receive_response(response)

    def receive_response(self):
        # process response here because it is my callback method

    def start(self):
        thread = threading.Thread(target=self.make_resquest)
        thread.start()

一切正常,但方法 receive_response 应该在主线程中调用,而不是我在 start 方法中启动的线程。怎样才能回到主线程执行receive_response方法?

非常感谢您的帮助!

【问题讨论】:

  • 此时主线程在做什么?
  • 你可能还想看看这个问题:stackoverflow.com/questions/18989446/…
  • 如果您在带有事件循环的 GUI 环境中工作,您还可以查看以下内容:stackoverflow.com/questions/270648/…
  • 主线程是一系列 python 脚本行(打印和计算)以及其他独立的 HTTP 请求。当我的请求完成后,我希望我的主线程在回调中返回,执行它,然后继续执行脚本行和其他独立请求
  • 我认为你最好的选择是我发布的第一个问题。在 GUI 环境中,已经有一个事件队列设置,您可以将其放入其中。如果您的主线程很忙,您所能做的就是让它不时检查待处理任务的队列。另一种选择是让主线程产生一个辅助线程来完成所有工作并启动所有作业。那么主线程只是等待处理响应?

标签: python multithreading


【解决方案1】:

你可以创建类的'thread'和'response'成员变量,并在'receive_response'中加入线程。加入线程后,您知道线程已完成接收“响应”,因此可以进行处理。

【讨论】:

  • 你能从辅助线程加入辅助线程到主线程吗?看来他需要某种调用功能?
  • 我想象 start 会分派一个异步请求,该请求可以在稍后调用 receive_response 时接收。这将使主线程能够在请求进行时执行其他操作。在这种情况下,make_request 方法不应调用 receive_response。
  • Jeremy 是对的:如果我使用 join 调用,我的主线程将等到请求结束。我需要一些完全异步的东西,以便主线程可以继续处理其他请求。你会如何调用 receive_response 呢?
  • 如果你想同时等待多个线程,那么我认为排队是正确的解决方案。
  • 我目前正在寻找 1 个请求。我可以有多个请求,但在 MyConnection 的单独实例中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 2017-04-08
  • 2019-08-18
  • 1970-01-01
  • 2017-08-21
  • 2017-06-19
  • 1970-01-01
相关资源
最近更新 更多