注意:多进程中,同一个变量,各自都有一份拷贝存于每个进程 互不影响
多线程中,每个变量由所有线程共享,任何一个变量都可以被任何一个线程修改
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)