Python多线程同步Lock、RLock、Semaphore、Event实例(2)
import logging
import threading
import time
logging.basicConfig(level=logging.DEBUG,
format="(%(threadName)-10s : %(message)s",
)
def wait_for_event_timeout(e, t):
"""Wait t seconds and then timeout"""
while not e.isSet():
logging.debug("wait_for_event_timeout starting")
event_is_set = e.wait(t)
logging.debug("event set: %s" % event_is_set)
if event_is_set:
logging.debug("processing event")
else:
logging.debug("doing other work")
e = threading.Event()
t2 = threading.Thread(name="nonblock",
target=wait_for_event_timeout,args=(e, 2))
t2.start()
logging.debug("Waiting before calling Event.set()")
time.sleep(7)
e.set()
logging.debug("Event is set")
运行结果:
三、其他
1) 线程局部变量
线程局部变量的值是跟线程相关的,区别与全局的变量。使用非常简单如下:
mydata = threading.local()
mydata.x = 1
2)对Lock,semaphore,condition等使用with关键字代替手动调用acquire()和release()。
- 上一篇:Python中的闭包详细介绍和实例
- 下一篇:python多进程操作实例