Python多线程

Posted 柒意

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python多线程相关的知识,希望对你有一定的参考价值。

参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017629247922688

多任务可以由多进程完成,也可以由一个进程内的多线程完成。

进程是由若干线程组成的,一个进程至少有一个线程。

threading

import time
import threading


# 新线程执行的代码
def loop(n: int):
    print(f\'线程{threading.current_thread().name} 正在运行...\')
    while n < 5:
        n = n + 1
        print(f\'线程{threading.current_thread().name}>>>{n}\')
        time.sleep(1)
    print(f\'线程{threading.current_thread().name} 结束。\')


# current_thread() 返回当前线程的实例
print(f\'主线程{threading.current_thread().name}正在运行\')

# target=线程需执行的方法, name=线程的名字(线程的名字仅用于打印显示), args=(执行函数的参数,)
t = threading.Thread(target=loop, name=\'LoopThread\', args=(0, ))
t.start()
t.join()

# 任何进程都会默认启动一个线程,这里启动的就是 MainThread , 主线程中可以启动新的线程
print(f\'主线程{threading.current_thread().name}结束\')

运行结果:

/Users/zy7y/PycharmProjects/demo/venv/bin/python /Users/zy7y/PycharmProjects/demo/threading_demo.py
主线程MainThread正在运行
线程LoopThread 正在运行...
线程LoopThread>>>1
线程LoopThread>>>2
线程LoopThread>>>3
线程LoopThread>>>4
线程LoopThread>>>5
线程LoopThread 结束。
主线程MainThread结束

Process finished with exit code 0

Lock

多进程中,同一个变量,在每一个进程中,互不影响。

多线程中,所有变量都由所有线程共享,即任何一个变量都可以被任何一个线程修改线程之间共享数据最大的危险在于多个线程同时改一个变量

import time
import threading

# 银行存款
balance = 0

# 锁实例
lock = threading.Lock()


def change_it(n: int):
    # 先存后取,结果应该为0
    # global 全局(共享)变量:
    global balance
    balance = balance + n
    balance = balance - n


def run_thread(n: int):
    for i in range(1000000):
        # 获取锁
        lock.acquire()
        try:
            change_it(n)
        finally:
            # 释放锁
            lock.release()


t1 = threading.Thread(target=run_thread, args=(5,))
t2 = threading.Thread(target=run_thread, args=(8, ))

t1.start()
t2.start()

t1.join()
t2.join()

print(balance)


以上是关于Python多线程的主要内容,如果未能解决你的问题,请参考以下文章

[Python3] 043 多线程 简介

python中的多线程和多进程编程

多线程 Thread 线程同步 synchronized

多个用户访问同一段代码

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

线程学习知识点总结