多线程——python进阶知识

多线程与多进程的区别

多线程是单个内核通过锁的手段实现同一时间运行多个程序,在某些情况下可以提升总体的运行效率。同时为了防止多个线程在对同一数据进行修改时导致的不可预测的后果,需要借助锁、队列等保证进程的同步。

多进程是多个内核执行多个任务,可以实现一时间完成多个任务,保证提升效率

python中的多线程

import threading


print(threading.active_count())   # 查看当前线程数量
print(threading.enumerate())    # 查看所有线程名称
print(threading.current_thread())    # 查看当前正在运行的线程的名词

 指定新线程内容和名称,并启动

def job():
    print("I'm a new threading!")

def main():
    my_threading = threading.Thread(target=job, name="T1")    # 定义新的线程
    my_threading.start()

if __name__ == "__main__":
    main()

多线程——python进阶知识_第1张图片

join方法,把分支加入到主线程中

import time

def job2():
    for _ in range(10):
        time.sleep(0.1)
    print("I'm the second threading!")

# 合并了多个线程
def run1():
    my_threading = threading.Thread(target=job, name="T1")   
    my_threading2 = threading.Thread(target=job2, name='T2')
    my_threading.start()
    my_threading2.start()
    my_threading.join()
    my_threading2.join()
    print("Finished!",end='\n\n')
run1()

# 没有合并多个线程
def run2():
    my_threading = threading.Thread(target=job, name="T1")   
    my_threading2 = threading.Thread(target=job2, name='T2')
    my_threading.start()
    my_threading2.start()
    print("Finished!")
run2()

多线程——python进阶知识_第2张图片

利用Queue队列完成多线程数据的存取

因为新线程的函数是无法使用return完成数据的返回,因此需要借助队列完成数据放入和取出操作

from queue import Queue

def job(l, q):
    """
    l: 被操作的list数据
    q:存储操作后数据的队列
    线程的工作内容,对每个list执行平方的操作
    """
    for i in range(len(l)):
        l[i] = l[i]**2
    q.put(l[i])    # 队列存放运算后的数据

def multithreading(data):
    q = Queue()
    for i in range(4):
        t = threading.Thread(target=job, args=(data[i],q))
        t.start()    # 启动线程
        t.join()    # 合并线程到主线程中
    results = []    # 存放每个线程运算的结果
    for _ in range(4):
        results.append(q.get())    # 取出队列的数据放入结果中
    print(results)

multithreading([[1,2,3], [2,3,4], [3,4,5], [4,5,6]])

多线程——python进阶知识_第3张图片

 

你可能感兴趣的:(信息管理科研入门必备技能,#,python进阶知识,python,多线程,多进程,运行效率)