标签:
一、线程
threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。
创建线程的两种方式
1.threading.Thread
import threading
def f1(arg):
print(arg)
t = threading.Thread(target=f1,args=(123,))
#t.start代表这个线程已经准备就绪,等待cpu的调度。
t.start()
2.自定义,继承threading.Thread
class MyThread(threading.Thread):
def __init__(self, func,args):
self.func = func
self.args = args
super(MyThread, self).__init__()
def run(self):
self.func(self.args)
def f2(arg):
print(arg)
t1 = MyThread(f2,1234)
t1.start()
二、线程锁
当多个线程同时修改同一条数据时可能会出现脏数据,所以,出现了线程锁 - 同一时刻允许一个线程执行操作。
##没使用锁
import threading
import time
NUM = 10
def f1():
global NUM
NUM -= 1
time.sleep(2)
print(NUM)
for i in range(10):
t = threading.Thread(target=f1)
t.start()
##使用锁
def f1(l):
global NUM
#上锁
l.acquire()
NUM -= 1
time.sleep(2)
print(NUM)
#开锁
l.release()
#创建锁,Rlock可以加多层锁
lock = threading.RLock()
for i in range(10):
t = threading.Thread(target=f1,args=(lock,))
t.start()
标签:
原文地址:http://www.cnblogs.com/Z-style/p/5690146.html