多线程 Thread

注意:多进程中,同一个变量,各自都有一份拷贝存于每个进程 互不影响

          多线程中,每个变量由所有线程共享,任何一个变量都可以被任何一个线程修改


python提供两个模块:_thread(低级模块),threading(高级模块)

import time,threading

#新线程执行的代码
def loop():
    #threading.current_thread()返回的是当前线程的实例
    print('thread %s is running...'%threading.current_thread().name)
    n=0
    while n<5:
        n=n+1
        print('thread %s >> %s'%(threading.current_thread().name,n))
        time.sleep(1)
    print('thread %s ended'%threading.current_thread().name)

print('thread %s is runing'%threading.current_thread().name)
t=threading.Thread(target=loop,name='LoopThread')
t.start()
#运行完停止
t.join()
print('thread %s ended'%threading.current_thread().name)


【加锁Lock】

lock.acquire()--> 只有一个线程能成功获取锁 执行代码,其他线程要等待解锁 自己获得线程为止

lock.release()--> 获得锁的线程一定要记得释放锁,否则其他线程将永远等待下去 成为死线程

try...finally------->无论try怎样,finally都会执行

import threading

balance=0
lock=threading.Lock()

def change_it(n):
    global balance
    balance=balance+n
    balance=balance-n

def run_thread(n):
    #先获取锁
    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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值