为什么多处理锁定失败?

时间:2015-04-30 09:55:13

标签: python multithreading locking multiprocessing

我只是在试用官方文档中的some example,并注意到锁定似乎并不像宣传的那样有效。发生了什么事?

from multiprocessing import Process, Lock

def f(l, i):
    l.acquire()
    for j in range(10000):
        print j,
    print
    l.release()

if __name__ == '__main__':
    lock = Lock()

    for num in range(10):
        Process(target=f, args=(lock, num)).start()

在Ipython笔记本中输出如下:

  

2716 2717 27180 1 2 3 4 5 6 7 8 9 10

1 个答案:

答案 0 :(得分:3)

这很简单。您是否真的认为可以从Web应用程序中生成进程?因为IPython Notebook实际上是什么 不,你不能。如果webapps能够随意生成进程,那将是一个巨大的安全漏洞。他们无法在客户端执行此操作,因为它全部发生在浏览器的沙箱中。他们不应该在服务器端执行此操作,因为您可能希望以这种方式生成1000000个进程以及什么?服务器应该自杀? 显然multiprocessing模块在​​IPython Notebook中被模拟,一切都在一个进程中发生 - 而且这个进程拥有锁,所以一切都很好。 普通的Python和IPython解释器的输出是可以的,如果你没有尝试通过webapp控制进程的有趣想法,它会尊重锁。