我正在学习Python Threading Module。并且因为每个线程的输出将指向相同的目标,无论是数据库还是写入flatfile,我会假设在每个Thread的输出过程之前和之后使用Lock.acquire和Lock.release。
from threading import Thread, Lock
import time
def task(argument1, lock):
lock.acquire()
print 'processing ' + str(argument1)
lock.release()
time.sleep(5)
# Your baby code goes here
lock.acquire()
print 'finish processing' + str(argument1)
lock.release()
class Worker(Thread):
def __init__(self, argument1, lock):
Thread.__init__(self)
self.value = argument1
self.lock = lock
def run(self):
task(self.value, self.lock) # calling the routine
def main():
l = Lock()
worker1 = Worker('BAV99', l)
worker2 = Worker('ATMEGA328', l)
worker3 = Worker('LM340', l)
worker1.start()
worker2.start()
worker3.start()
if __name__ == '__main__':
你可能会对Lock的使用感到困惑。在一个简短的句子中,没有锁定,你可能会得到印刷品的分散。
没有锁定:
processing BAV99
processing ATMEGA328
processing LM340
finish processingBAV99finish processingLM340finish processingATMEGA328
带锁:
processing BAV99
processing ATMEGA328
processing LM340
finish processingBAV99
finish processingLM340
finish processingATMEGA328
问题是: 我发现有时在输出之间存在空行,如下所示,并想知道那里到底发生了什么,或者只是由日食引起的一些错觉。
processing BAV99
processing ATMEGA328
processing LM340
finish processingBAV99
finish processingLM340
finish processingATMEGA328
感到遗憾的是,错误可能不会被重复,这就是最困扰我的。