【发布时间】: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