让我们想象一下下面的代码:
import threading
from time import sleep
def short_task():
sleep(5)
print("short task")
def long_task():
sleep(15)
print("long task")
while True:
st = threading.Thread(target=short_task())
lt = threading.Thread(target=long_task())
st.start()
lt.start()
st.join()
lt.join()
我有两个函数,每个函数都需要不同的时间来处理,在我上面的方法中,输出将如下所示:
short task
long task
short task
long task
short task
long task
short task
long task
但所需的输出是:
short task
short task
short task
long task
short task
short task
short task
long task
实现这一目标的最佳方法是什么?一种可能很脏的方法是删除主 while
循环并在每个线程中放置一个 while
循环。
答案 0 :(得分:1)
正如您在问题中假设的,将 while 循环移动到线程内部将有助于获得预期的结果。
还有一件事。您在传递目标时正在调用该函数。您只需要单独传递函数名称。例如:target=short_task
也在您的主 while 循环中,因为您正在等待线程完成,因此输出交替出现是有意义的。我认为这是一个逻辑错误。
试试下面的代码应该能如你所愿。
我已将短函数的等待时间从 5 改为 4。所以要确保保持您想要的顺序。
import threading
from time import sleep
def short_task():
while True:
sleep(4)
print("short task")
def long_task():
while True:
sleep(15)
print("long task")
st = threading.Thread(target=short_task)
lt = threading.Thread(target=long_task)
st.start()
lt.start()
st.join()
lt.join()