WoJ*_*WoJ 13 python multiprocessing python-3.x python-multiprocessing
我有一个multiprocessing程序在哪里
multiprocessing.Manager().list())我multiprocessing.Lock()在添加到列表或从中删除时实现了锁定(via ).由于有一个"馈线"过程和几个(10-40个)"消费者"过程都在争夺锁定,并且消费者流程很快,我最终得到的"馈线"过程很难获得锁定.
获得锁定时是否存在"优先级"的概念?我希望"馈线"流程能够比其他流程更优先获得它.
现在我通过让"消费者"进程在尝试获取锁定之前等待一段随机时间来缓解这个问题,而"馈送"进程就在那里(当它结束时设置一个标志).这是一个有效的解决方法,但它很丑陋并且几乎没有效果(我有进程等待random.random()*n几秒钟,n进程数量在哪里.这是一个完全编号,可能是错误的).
它并不完美,但它必须有效:
在“馈线”中:
feeder_lock_object.lock()
consumer_lock_object.lock()
try:
...
finally:
feeder_lock_object.release()
consumer_lock_object.release()
Run Code Online (Sandbox Code Playgroud)
在“消费者”中:
while True:
with consumer_lock_object:
if feeder_lock_object.is_locked:
continue
...
Run Code Online (Sandbox Code Playgroud)
但我认为当你使用队列时会更好。
如果您使用此方法,请注意如何实现锁定对象。您应该使用初始化函数来初始化池,该函数将这些锁对象创建为全局参数。参考这个。