Python中如何实现三种多线程并发执行方式?

2026-05-24 17:241阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计850个文字,预计阅读时间需要4分钟。

Python中如何实现三种多线程并发执行方式?

第一种 + 进程启动后,会默认生产一个主线程。当使用多线程时,主线程会生产子线程。在Python中,默认设置是 `setDaemon(False)`,这意味着主线程执行完成后,子线程不会自行退出。

第一种
进程启动后,会默认产生一个主线程。当使用多线程时,主线程产生了子线程。在python中默认​​​setDaemon(False)​​,这种情况就是主线程执行完后自己退出,子线程不会退出而是继续执行,当子线程也执行完之后才会退出。

from threading import Thread
import time


class MyThread(Thread):
def __init__(self, func_name, args):
super(MyThread, self).__init__()
self.func_name = func_name
self.args = args

def run(self):
self.func_name(*self.args)


def print_1(n):
for i in range(n):
print("print_1:%s" % i)
time.sleep(1)


def print_2(n):
for i in range(n):
print("print_2:%s" % i)
time.sleep(1)


if __name__ == '__main__':
start_time = time.time()
t1 = MyThread(print_1, args=(5,))
t1.start()
t2 = MyThread(print_2, args=(5,))
t2.start()
end_time = time.time()
print("done.................")
print(end_time - start_time)print_1:0
print_2:0done.................
0.0009682178497314453

print_2:1print_1:1

print_1:2print_2:2

print_2:3
print_1:3
print_2:4
print_1:4

Process finished with exit code 0

第二种
当使用​​​setDaemon(True)​​方法,设置子线程为守护线程时,主线程一旦执行结束,就会导致所有线程全部被终止执行。

from threading import Thread
import time


class MyThread(Thread):
def __init__(self, func_name, args):
super(MyThread, self).__init__()
self.func_name = func_name
self.args = args

def run(self):
self.func_name(*self.args)


def print_1(n):
for i in range(n):
print("print_1:%s\n" % i)
time.sleep(1)


def print_2(n):
for i in range(n):
print("print_2:%s\n" % i)
time.sleep(1)


if __name__ == '__main__':
start_time = time.time()
t1 = MyThread(print_1, args=(5,))
t2 = MyThread(print_2, args=(5,))
t1.setDaemon(True)
t2.setDaemon(True)
t1.start()
t2.start()
end_time = time.time()
print("done.................")
print(end_time - start_time)print_1:0

print_2:0
done.................
0.0010318756103515625

Process finished with exit code 0

第三种

如果使用join,主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程才会终止。

from threading import Thread
import time


class MyThread(Thread):
def __init__(self, func_name, args):
super(MyThread, self).__init__()
self.func_name = func_name
self.args = args

def run(self):
self.func_name(*self.args)


def print_1(n):
for i in range(n):
print("print_1:%s\n" % i)
time.sleep(1)


def print_2(n):
for i in range(n):
print("print_2:%s\n" % i)
time.sleep(1)


if __name__ == '__main__':
start_time = time.time()
t1 = MyThread(print_1, args=(5,))
t2 = MyThread(print_2, args=(5,))
t1.setDaemon(True)
t1.start()
t2.setDaemon(True)
t2.start()
t1.join()
t2.join()
end_time = time.time()
print("done.................")
print(end_time - start_time)print_1:0

print_2:0

print_2:1

print_1:1

print_1:2
print_2:2


print_2:3

print_1:3

print_2:4
print_1:4

done.................
5.044650077819824

Process finished with exit code 0

如果没用多线程的话,先后执行这两个参数用时10s左右


Python中如何实现三种多线程并发执行方式?

本文共计850个文字,预计阅读时间需要4分钟。

Python中如何实现三种多线程并发执行方式?

第一种 + 进程启动后,会默认生产一个主线程。当使用多线程时,主线程会生产子线程。在Python中,默认设置是 `setDaemon(False)`,这意味着主线程执行完成后,子线程不会自行退出。

第一种
进程启动后,会默认产生一个主线程。当使用多线程时,主线程产生了子线程。在python中默认​​​setDaemon(False)​​,这种情况就是主线程执行完后自己退出,子线程不会退出而是继续执行,当子线程也执行完之后才会退出。

from threading import Thread
import time


class MyThread(Thread):
def __init__(self, func_name, args):
super(MyThread, self).__init__()
self.func_name = func_name
self.args = args

def run(self):
self.func_name(*self.args)


def print_1(n):
for i in range(n):
print("print_1:%s" % i)
time.sleep(1)


def print_2(n):
for i in range(n):
print("print_2:%s" % i)
time.sleep(1)


if __name__ == '__main__':
start_time = time.time()
t1 = MyThread(print_1, args=(5,))
t1.start()
t2 = MyThread(print_2, args=(5,))
t2.start()
end_time = time.time()
print("done.................")
print(end_time - start_time)print_1:0
print_2:0done.................
0.0009682178497314453

print_2:1print_1:1

print_1:2print_2:2

print_2:3
print_1:3
print_2:4
print_1:4

Process finished with exit code 0

第二种
当使用​​​setDaemon(True)​​方法,设置子线程为守护线程时,主线程一旦执行结束,就会导致所有线程全部被终止执行。

from threading import Thread
import time


class MyThread(Thread):
def __init__(self, func_name, args):
super(MyThread, self).__init__()
self.func_name = func_name
self.args = args

def run(self):
self.func_name(*self.args)


def print_1(n):
for i in range(n):
print("print_1:%s\n" % i)
time.sleep(1)


def print_2(n):
for i in range(n):
print("print_2:%s\n" % i)
time.sleep(1)


if __name__ == '__main__':
start_time = time.time()
t1 = MyThread(print_1, args=(5,))
t2 = MyThread(print_2, args=(5,))
t1.setDaemon(True)
t2.setDaemon(True)
t1.start()
t2.start()
end_time = time.time()
print("done.................")
print(end_time - start_time)print_1:0

print_2:0
done.................
0.0010318756103515625

Process finished with exit code 0

第三种

如果使用join,主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程才会终止。

from threading import Thread
import time


class MyThread(Thread):
def __init__(self, func_name, args):
super(MyThread, self).__init__()
self.func_name = func_name
self.args = args

def run(self):
self.func_name(*self.args)


def print_1(n):
for i in range(n):
print("print_1:%s\n" % i)
time.sleep(1)


def print_2(n):
for i in range(n):
print("print_2:%s\n" % i)
time.sleep(1)


if __name__ == '__main__':
start_time = time.time()
t1 = MyThread(print_1, args=(5,))
t2 = MyThread(print_2, args=(5,))
t1.setDaemon(True)
t1.start()
t2.setDaemon(True)
t2.start()
t1.join()
t2.join()
end_time = time.time()
print("done.................")
print(end_time - start_time)print_1:0

print_2:0

print_2:1

print_1:1

print_1:2
print_2:2


print_2:3

print_1:3

print_2:4
print_1:4

done.................
5.044650077819824

Process finished with exit code 0

如果没用多线程的话,先后执行这两个参数用时10s左右


Python中如何实现三种多线程并发执行方式?