何鑫思想是:
decorator是多线程安全的
看如下代码, 思想就是
让线程A进入decorator并loop, 首先打印pause
让线程B进入decorator, 如果打印, 证明是线程安全的
import multiprocessing
import threading
import time
import os
def decorator(func):
def _inner(*args, **kwargs):
while args[0].status == 0:
print threading.current_thread().ident, 'pause'
time.sleep(5)
func(*args, **kwargs)
return _inner
class A(threading.Thread):
def __init__(self):
super(A, self).__init__()
self.status = 1
def pause(self):
self.status = 0
print threading.current_thread().ident, 'receive pause'
def recover_form_pause(self):
self.status = 1
def run(self):
print threading.current_thread().ident, 'start'
time.sleep(1)
self.func1()
@decorator
def func1(self):
print threading.current_thread().ident, 'func1'
time.sleep(1)
self.func2()
@decorator
def func2(self):
print threading.current_thread().ident, 'func2'
time.sleep(1)
self.func3()
@decorator
def func3(self):
print threading.current_thread().ident, 'func3'
self.func1()
time.sleep(1)
if __name__ == '__main__':
print 'main thread', threading.current_thread().ident
p1 = A()
p1.start()
p1.pause()
time.sleep(2)
p2 = A()
p2.start()
p2.pause()
# p1.recover_form_pause()
# p2.recover_form_pause()