搜索

from multiprocessing import Pool,Lock
def text(i,lock):
    print(i)
    lock.acquire()
        DOSOMETHING
    lock.release()
if __name__ == '__main__':
    lock=Lock()
    pool=Pool(processes=8)
    for i in range(1,1000):
        pool.apply_async(text,(i,lock))
    pool.close()
    pool.join()

这里的锁是没有作用的,一样会冲突.因为lock不能作为对象传参,所以增加Manager(日志写入锁),其实是相当于一个专门的进程去处理Manager服务

from multiprocessing import Pool,Lock,Manager
def text(i,lock):
    print(i)
    lock.acquire()
        temp=music_url.find({'singername':'v'})[0]['url']+1
    music_url.update({'singername':'v'},{'$set':{'url':temp}})
    lock.release()
if __name__ == '__main__':
    arr=[]
    manager = Manager()
    lock=manager.Lock()
    pool=Pool(processes=8)
    for i in range(1,1000):
        pool.apply_async(text,(i,lock))
    pool.close()
    pool.join()

这样使用没有问题

版权属于:honus
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
0
查看目录

目录

来自 《Python multiprocessing acync Lock 遇到的问题》
评论

Honus

博主很懒,啥都没有