[问题] multiprocess + sleep + Lock问题

楼主: FFALAN (Alan)   2018-01-30 23:34:34
from time import sleep
from multiprocessing import Process, Lock
def time_delay(d):
sleep(d)
def printer(item, lock):
print(item)
lock.acquire()
print('time delay start')
time_delay(1)
print('time delay end')
lock.release()
if __name__ == '__main__':
lock = Lock()
items = ['item1', 'item2', 'item3']
for item in items:
p = Process(target=printer, args=(item, lock))
p.start()
请问各位前辈,为何输出结果是
item1
time delay start
time delay end
item2
time delay start
time delay end
item3
time delay start
time delay end
而不是
item1
item2
item3
time delay start
time delay end
time delay start
time delay end
time delay start
time delay end
明明print item的时候还没被Lock住阿...
而且他是先执行time_delay才开始print item...
请问是我哪里误会了lock的用法?
谢谢各位!
作者: djshen (djshen)   2018-01-31 00:27:00
版本 平台
作者: uranusjr (←這人是超級笨蛋)   2018-02-01 17:29:00
Multiprocess 可能的状况太多了, 这样根本无法解Lock 本身就是很不可靠的东西, 我唯一的建议是不要用
楼主: FFALAN (Alan)   2018-02-02 00:44:00
2.7/windows
作者: cphe (魔鬼藏在垃圾筒里)   2018-02-02 20:33:00
multiprocess这个情况跑出来的顺序不一定是可预期的你这段code我直接拿来跑,结果就和你的不一样lock的目的是确保acquire和release之间同时只会有一人执行
作者: a110482 (研磨绿豆沙)   2018-02-04 03:03:00
lock.acquire() 不是指"上锁" 应该要理解成,lock是一把大家共用的锁.而lock.acquire()要解释成:如果lock没被上锁,那我(这一条线程)就把锁锁上.然后接着执行后面的code 若有其他线程先锁住了,那我就在这行待命,直到锁解开
作者: ar54971   2018-03-06 03:44:00
作者: galeondx   2018-03-06 04:22:00

Links booklink

Contact Us: admin [ a t ] ucptt.com