Python 为什么多处理锁定失败?
我只是在尝试从官方文档中获取信息,并注意到锁定似乎不像广告中所宣传的那样有效。发生了什么事Python 为什么多处理锁定失败?,python,multithreading,locking,multiprocessing,Python,Multithreading,Locking,Multiprocessing,我只是在尝试从官方文档中获取信息,并注意到锁定似乎不像广告中所宣传的那样有效。发生了什么事 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
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笔记本中运行,输出如下:
271627172718012345678910
很简单。您真的认为可以从web应用程序中生成进程吗?因为事实就是这样。
不,你不能。如果webapps能够随意生成进程,那将是一个巨大的安全漏洞。他们不能在客户端完成,因为这一切都发生在浏览器的沙箱中。他们不应该在服务器端这样做,因为您可能希望以这种方式生成1000000个进程,然后呢?服务器应该自杀吗?
显然,
多处理
模块在IPython笔记本中被模拟,所有的事情实际上都发生在一个进程中——这个进程拥有锁,所以一切都很好。
普通Python和IPython解释器的输出是正常的,如果您不尝试通过webapp控制进程的有趣想法,它将尊重锁。在linux2上的Python 2.7.6上运行良好。