待看

Python线程

2022-09-02  本文已影响0人  开心的小哈

概念

什么是进程,在windows操作系统中一个进程就是一个exe或者dll程序、他们相互独立,相互可以通信
一个进程中可以有多个线程,多个线程共享一块内存空间和一组系统资源,系统在各个线程之间切换时,开销要比进程小得多,正应如此,线程被称为轻量级进程;
了解了线程和进程那么我们说说python

python程序中只要有一个线程,这就是主线程,程序启动后由python解释器负责创建主线程,在程序结束后由python解释器负责停止主程序;

线程呢模块--threading

函数常用方法:

import threading

t=threading.current_thread()
print(t.name)
print(threading.active_count())
t= threading.main_thread()
print(t.name)
执行结果
MainThread
1
MainThread

子线程

  1. 自定义函数实现线程体
  2. 自定义线程类实现线程体

代码演示

import threading

import  time

value=[]

def thread_body():
    t=threading.current_thread()
    for n in range(5):
        print('第{}次执行线程{}'.format(n,t.name))
        time.sleep(2)
    print('线程{}执行完成'.format(t.name))

t1=threading.Thread(target=thread_body)
t2=threading.Thread(target=thread_body,name='Myt2Thread')
t1.start()
t2.start()

以及使用继承实现

import threading

import  time

value=[]

class SmallThread(threading.Thread):
    def __init__(self,name):
        super().__init__(name=name)

    def run(self) -> None:
        t=threading.current_thread()
        for n in range(5):
            print('第{}次执行线程{}'.format(n, t.name))
            time.sleep(2)
        print('线程{}执行完成'.format(t.name))

def thread_body():
    t=threading.current_thread()
    for n in range(5):
        print('第{}次执行线程{}'.format(n,t.name))
        time.sleep(2)
    print('线程{}执行完成'.format(t.name))

t1 = SmallThread('t1Thread')
# t1=threading.Thread(target=thread_body)
t2=threading.Thread(target=thread_body,name='Myt2Thread')
t1.start()
t2.start()

线程管理

import threading
import time

value=[]

def thread_body():
    print('子线程开始')
    for n in range(5):
        print('子线程执行')
        value.append(n)
        time.sleep(2)
    print('子线程结束')
print('主线程执行开始')
t1=threading.Thread(target=thread_body)
t1.start()
# t1.join()
print('value={}'.format(value))
print('主线程执行结束')
执行结果
主线程执行开始
子线程开始
子线程执行
value=[0]
主线程执行结束
子线程执行
子线程执行
子线程执行
子线程执行
子线程结束

使用join后

import threading
import time

value=[]

def thread_body():
    print('子线程开始')
    for n in range(5):
        print('子线程执行')
        value.append(n)
        time.sleep(2)
    print('子线程结束')
print('主线程执行开始')
t1=threading.Thread(target=thread_body)
t1.start()
t1.join()
print('value={}'.format(value))
print('主线程执行结束')
执行结果
主线程执行开始
子线程开始
子线程执行
子线程执行
子线程执行
子线程执行
子线程执行
子线程结束
value=[0, 1, 2, 3, 4]
主线程执行结束

线程停止

在线程体结束时,线程就停止了。但在某些业务比较复杂时,会在 线程体中执行一个“死循环”。线程体是否持续执行“死循环”是通过判断 停止变量实现的,“死循环”结束则线程体结束,线程也就结束了。 另外,在一般情况下,死循环会执行线程任务,然后休眠,再执行 ,再休眠,直到结束循环。


image.png
import threading
import time

isrunning=True

def workthread_body():
    while isrunning:
        print('工作线程执行中')
        time.sleep(5)
    print('工作线程执行完毕')

def contorlthread_body():
    global isrunning
    while isrunning:
        comp=input('输入质量暂停')
        if comp == 'exit':
            isrunning=False
            print('控制线程结束')

work=threading.Thread(target=workthread_body)
cont=threading.Thread(target=contorlthread_body)
work.start()
cont.start()


执行结果:

工作线程执行中
输入质量暂停
输入质量暂停
输入质量暂停
输入质量暂停
输入质量暂停工作线程执行中

输入质量暂停
输入质量暂停exit
控制线程结束
工作线程执行完毕

上一篇下一篇

猜你喜欢

热点阅读