当前位置 : 主页 > 编程语言 > python >

python多线程三种并发过程

来源:互联网 收集:自由互联 发布时间:2022-06-20
第一种 进程启动后,会默认产生一个主线程。当使用多线程时,主线程产生了子线程。在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左右


上一篇:更新pip版本被卸载解决
下一篇:没有了
网友评论