threading多线程
侧边栏壁纸
  • 累计撰写 16 篇文章
  • 累计收到 2 条评论

threading多线程

晨旭不想写程序
2024-06-02 / 0 评论 / 8 阅读 / 正在检测是否收录...

threading

在处理多并发问题时,我们通常使用多线程进行处理,Python 实现多线程编程需要借助于 threading 模块

基本使用

threading 模块中最核心的内容是 Thread 这个类

每个对象都代表一个线程,平时我们直接运行的部分就是主线程

Thread 的构造方法中,最重要的参数是 target

我们使用target将线程的目标指定出来(一个函数)

要让一个 Thread 对象启动,调用它的 start() 方法就可以了

thread = threading.Thread(target=test,name='name')
thread.start()
threading.active_count

表示目前已经运行了多少个线程

threading.enumerate

运行的线程有哪些

threading.current_thread

表示当前运行的线程是哪个

join功能

在start之后,在某处插入了.join(),则从此处开始至子线程中止都阻塞主线程,执行完当前任务后再继续进行主线程的任务

Queue功能

我们的线程无法得到返回值

所以我们要使用的话

我们就要先定义出一个队列

def job(data,q):
    for i in range(len(data)):
        data[i] = data[i]**2
    q.put(l)
def multithreading(data):
    q = Queue()
    threads = []
    data = [[1,2,3],[3,4,5],[4,4,4],[5,5,5]]
    for i in range(4):
        t = threading.Thread(target = job,args=(data[i],q))
        t.start()
        threads.append(t)
    for thread in threads:
        thread.join()
    results = []
    for _ in range(4):
        results.append(q.get())

多线程的效率问题

多线程的任务分配并不是平均分配

使用GIL分配方式

同一时间只有一个线程在进行,节省效率是因为读写可以与其他线程的运算同时进行

LOCK

锁的功能

lock = threading.Lock()
lock.acquire()
|运行|
lock.release()

锁的意义就在于多个线程在对共享数据进行修改时,为了让数据同步做的锁定,让线程获得后进行即可

详细查阅 http://www.runoob.com/python3/python3-multithreading.html

0

评论 (0)

取消