10月31日 开启子线程的两种方式

发布时间 2023-10-31 16:20:53作者: songjunwan

开启子线程的两种方式

第一种方式

按照进程的方式开启只是将模块换了一下,

以函数为例子

代码如下

##开启方式1
from threading import Thread#这里将threading包里面的Thread模块导入
import time
def task():
    print('子线程start')
    time.sleep(2)
    print('子线程end')



if __name__ == '__main__':
    t = Thread(target=task)#将开启的
    t.start()#告诉操作系统开一个线程

    print('主线程')

这个代码将模块换了一个下,整体和进程的格式以及使用差不多,这就来体现一下它的不同点以及相同点

##开启方式1
from threading import Thread#这里将threading包里面的Thread模块导入
import time
def task(xulie):
    print(f'子线程{xulie}start')
    time.sleep(2)
    print(f'子线程{xulie}end')



if __name__ == '__main__':
    t = Thread(target=task,args=('第一',))#给要打开的子线程的名名字赋值
    t.start()#告诉操作系统开一个线程

    print('主线程')

相同点:就是可以按照给子进程赋名字的方法,给开启的子线程也进行名字的赋值,同理其它的传参也可以按照子进程来使用

不同点:子线程和主线程会同时执行,这是因为子线程的执行不需要开辟内存空间,所以比较快。然后进程里的子进程需要等操作系统给它开内存空间所以慢

结果如图

第二种方式

也是和进程的差不多

这里以类为例子

代码如下

# 开启方式二(类)
from threading import Thread
import time


class Myt(Thread):
    def run(self):
        print('子线程start')
        time.sleep(2)
        print('子线程end')

t = Myt()
t.start()
print('主线程')

这个代码里面没有使用全局调用是因为,线程不会有进程的问题,在windows下使用Process会出现无限递归导入的问题,但是Thread不会出现这个问题,所以用不用全局调用问题不大

结果如图