【问题标题】:How to queue 3 dependent functions using threads and queues如何使用线程和队列对 3 个依赖函数进行排队
【发布时间】:2018-12-09 13:34:35
【问题描述】:

我有 3 个函数需要运行。每个函数都会生成下一个函数所依赖的特定输出。所以基本上,一旦第一个完成,我就可以继续进行第二个,但是一旦第二个运行,我可以再次开始运行第一个以生成下一批数据 - 所以我想同时运行它们同时,但我不能在完成第一个之前运行第二个,在完成第二个之前不能运行第三个。但是我可以在第三个运行时运行第一个和第二个。如何在 python 中使用线程来实现它?我了解线程背后的基础知识,但我不知道如何为此目的创建队列。

这是我需要做的一个例子:

# This is what will usually happen without threading. How can I implement the
# same thing but with threading? Keep in mind that foo() 1, 2 and 3
# take some amount of time. And foo2() may finish before foo() finished
# generating data, so I can't run foo2() until I have the data from foo()

# foo generates the data for foo2
data = foo()
# foo2 generates data for foo3
data2 = foo2(data)
# foo3 does something with data2 and the data is no longer used
foo3(data2)

【问题讨论】:

  • 为什么首先要使用线程?
  • 因为我想在 foo2 和 foo3 运行时用 foo 生成下一批数据,因为它们需要时间,所以很有价值。与 foo2 相同,我已经可以在 foo3 运行时为 foo3 生成数据。
  • 如果由于全局解释器锁而试图加快代码速度,它不会加快代码速度
  • 但是当第二个函数运行时,如果我将函数1作为线程运行,它不会同时运行吗?我的意思是,如果函数 2 需要 30 分钟,而函数 1 需要一个小时,而函数 2 运行时我也将函数 1 作为线程运行,我不会节省 30 分钟吗?
  • 创建一个队列并将其传递给foo 进行填充。创建另一个队列并将其传递给foo2 来填充,同时也是第一个要消耗的队列。将第二个队列传递给foo3 消费。

标签: python multithreading python-multithreading


【解决方案1】:

在浏览完您的问题后,我进行了更多搜索。我了解您正在寻找的是某种管道模式。看来 Python 确实有它的用处。链接中 qn 的答案还谈到了@Peterwood 关于使用队列的说法。 How to design an async pipeline pattern in python

【讨论】:

    猜你喜欢
    • 2013-07-24
    • 2015-02-15
    • 2012-05-20
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多