python多线程

1.进程与线程

很多同学都说, 现在很多操作系统如MacOS,Linux, Unix, Windows 都是支持多任务的操作系统, 那么什么叫"多任务"呢? 简单来说, 就是操作系统可以同时运行多个任务, 比如, 你一边用浏览器上网,一边用听歌, 一边看电视, 一边下载文件, 这就是多任务,至少同时有多个任务在后台同时运行着

那么所谓的进程就是一个任务, 比如你打开一个浏览器就是启动一个浏览器进程,打开一个记事本就是启动记事本进程, 有些进程还不止干一件事, 比如你打开浏览器, 一边浏览网页, 一边下载文件, 一边听歌曲, 在一个进程内, 同时执行多个子任务, 我们称这些“子任务”为线程

所以一个进程至少有一个线程, 多个线程可以同时执行, 多任务可以由多进程完成, 也可以由一个进程内多线程完成, 多线程的程序可以提高资源的利用率, 提高系统的执行效率


2.ThreadLocal

多线程和多进程的最大不同在于,多进程中,同一个变量, 各自有一份拷贝存在每个进程中,互不影响, 而多线程中, 所有变量都由线程共享, 任何一个变量都可以被任何一个线程所修改, ThreadLocal 线程局部变量, 一个线程使用自己的局部变量比使用全局变量好,因为不影响其他线程 接下来我们来看一下ThreadLocal的应用:

import threading

# 创建全局ThreadLocal对象
threadLocal = threading.local()


def process():
    # 获取当前线程关联的student
    number = threadLocal.student
    print('Hello %s (in %s)' % (number, threading.current_thread().name))


def process_thread(name):
    # 绑定ThreadLocal的student
    threadLocal.student = name
    process()


t1 = threading.Thread(target=process_thread, args=('Alice',), name='Thread-A')
t2 = threading.Thread(target=process_thread, args=('Bob',), name='Thread-B')

t1.start()
t2.start()
t1.join()
t2.join()


你可能感兴趣的:(python)