【发布时间】:2017-12-14 20:50:10
【问题描述】:
我正在尝试在进程之间共享锁。我知道共享锁的方法是将其作为参数传递给目标函数。但是我发现即使下面的方法也有效。我无法理解进程共享此锁的方式。谁能解释一下?
import multiprocessing as mp
import time
class SampleClass:
def __init__(self):
self.lock = mp.Lock()
self.jobs = []
self.total_jobs = 10
def test_run(self):
for i in range(self.total_jobs):
p = mp.Process(target=self.run_job, args=(i,))
p.start()
self.jobs.append(p)
for p in self.jobs:
p.join()
def run_job(self, i):
with self.lock:
print('Sleeping in process {}'.format(i))
time.sleep(5)
if __name__ == '__main__':
t = SampleClass()
t.test_run()
【问题讨论】:
-
也许你在一个 Unix 系统上。阅读fork
-
@JamesKPolk 我使用的是 Windows,Python 3.5。
-
是什么让您认为他们共享锁?如果删除 with self.lock 行,是否得到相同的输出?
-
如果 mp.lock() 被实现为 @staticmethod 怎么办?您没有为多处理类创建任何对象。
-
@HughFisher 如果我删除 self.lock 行,每个进程都会立即启动并在完成前等待五秒钟。有锁时不是这种情况
标签: python python-3.x locking multiprocessing shared-variable