Python 多线程:如何在循环中运行多个异步线程

时间:2021-03-04 05:46:44

标签: python multithreading python-multiprocessing

让我们想象一下下面的代码:

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 循环。

1 个答案:

答案 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()