python 单线程、多线程、线程池、线程锁

import time
# 导入用于多线程操作的库
# 这样子仅需要在自定义的函数前面使用装饰器即可将函数开启新的线程
import multitasking
import signal
# 按快捷键 ctrl + c 终止已开启的全部线程
signal.signal(signal.SIGINT, multitasking.killall)
 
# 多线程装饰器
 
 
@multitasking.task
def say(number: int):
    print(number)
    time.sleep(0.5)
 
 
start_time = time.time()
for i in range(5):
    say(i)
# 等待全部线程执行完毕
multitasking.wait_for_tasks()
end_time = time.time()
print('耗时:', end_time-start_time, '秒')
import threading

from concurrent.futures import *

import random

import datetime



#创建锁

totalSuccLock = threading.Lock()

#定义一个全局变量

class GlobalVar:

    totalSucc = 0





#创建线程对象

class ThreadClass(threading.Thread):

    def __init__(self,a):

        super().__init__()#调用父类的init方法,这句话必须写

        self.a = a

    def run(self) :

        testThreading(self.a)

       



def testThreading(a):

    totalSuccLock.acquire()

    print(str(a))

    #获得锁

   

    GlobalVar.totalSucc =GlobalVar.totalSucc + 1

    #释放锁

    totalSuccLock.release()

    return random.random



if __name__=="__main__":

    start = datetime.datetime.now()

    #创建线程池

    executor = ThreadPoolExecutor(max_workers=16)

    futureList = []

    #第一种创建线程的方式:指定方法

    for i in range(0,500):

        #错误示范

        #threadObj = threading.Thread(target=testThreading(i))

        #正确示范

        #threadObj = threading.Thread(target=testThreading,args=("a"))

        #threadObj.start()

    #第二种创建线程的方式:实例化线程对象

        #threadObj = ThreadClass("a")

        #threadObj.start() #不能直接调用run方法启动线程

    #第三种使用线程池的方法,创建线程

        future = executor.submit(testThreading,i)

        #获取线程执行结果,阻塞线程的循环

        # future.result()

        #创建列表先把结果存储起来

        futureList.append(future)

    for future in futureList:

        print("线程池里的线程执行结束,结果 = ",future.result())

        #testThreading(i)





   

    print("-----------------主线程执行完成-------,用时 = ",datetime.datetime.now() - start ,",totalSucc = ",GlobalVar.totalSucc)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值