栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python多线程三种并发过程

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python多线程三种并发过程

第一种
进程启动后,会默认产生一个主线程。当使用多线程时,主线程产生了子线程。在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:%sn" % i)
        time.sleep(1)


def print_2(n):
    for i in range(n):
        print("print_2:%sn" % 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:%sn" % i)
        time.sleep(1)


def print_2(n):
    for i in range(n):
        print("print_2:%sn" % 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左右

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/313717.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号