例子:
import threading
class MyThread(threading.Thread):
def __init__(self, args):
#使用super写法,按照父类.方法的方式直接重写
super(MyThread, self).__init__()
self.args = args
def run(self):
print ("start MyThread {0}".format(self.args))
def worker(n):
print ("start worker{0}".format(n))
if __name__ == "__main__":
#同多进程使用方法
for i in xrange(1, 6):
#使用threading.Thread指定函数和参数,多线程执行
t1 = threading.Thread(target=worker, args=(i,))
#开始多线程执行
t1.start()
t1.join()
#重写threading.Thread中的run方法实现多线程
for x in xrange(6, 11):
t2 = MyThread(x)
t2.start()
t2.join()
输出:
start worker1
start worker2
start worker3
start worker4
start worker5
start MyThread 6
start MyThread 7
start MyThread 8
start MyThread 9
start MyThread 10
多线程锁
多线程锁的两种写法,详见下面两个例子
例子:
import threading
import time
def worker(name, lock):
#with写法会自动获得锁并自动释放锁,与
with lock:
print ("start {0}".format(name))
time.sleep(2)
print ("end {0}".format(name))
if __name__ == "__main__":
#锁的实例化
lock = threading.Lock()
t1 = threading.Thread(target=worker, args=("worker1", lock))
t2 = threading.Thread(target=worker, args=("worker2", lock))
t1.start()
t2.start()
print ("main end")
输出:
start worker1
main end
end worker1
start worker2
end worker2
例子:
import threading
import time
def worker(name, lock):
#获取线程锁
lock.acquire()
#捕获异常
try:
print ("start {0}".format(name))
time.sleep(2)
print ("end {0}".format(name))
except Exception as e:
raise e
finally:
#释放线程锁
lock.release()
if __name__ == "__main__":
#锁的实例化
lock = threading.Lock()
t1 = threading.Thread(target=worker, args=("worker1", lock))
t2 = threading.Thread(target=worker, args=("worker2", lock))
t1.start()
t2.start()
print ("main end")
输出:
start worker1
main end
end worker1
start worker2
end worker2
原文地址:http://blog.51cto.com/culiangmianbao/2050447