全局锁被忽略了?

时间:2014-10-29 23:13:28

标签: python locking

我使用SimpleHTTPServer作为代理。过度简化,我的程序看起来像这样:

print_lock = Lock()

class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):

    def do_GET(self):
        displayABC()
        displayDEF()

    def do_POST(self):
        displayABC()

def displayABC():
    print_lock.acquire()

    print "A"
    print "B"
    print "C"

    print_lock.release()

def displayDEF():
    print_lock.acquire()

    print "D"
    print "E"
    print "F"

    print_lock.release()

httpd = SocketServer.ForkingTCPServer(('', 80), Proxy)
httpd.serve_forever()

由于许多请求进入速度非常快,display方法在请求之间重叠,即:

A
D   # -> Note that they are 'out of order' in the output
E
F
B
C
...

当我理想地喜欢同一方法中的所有印刷品相互跟随时:

A
B   # -> Correct order
C
D
E
F
...

您可以在代码中看到我尝试使用Lock(),这没有任何效果。我搜索SO并且有一些类似的问题,但它们都处理线程。

0 个答案:

没有答案