python 多线程,全局变量已经加锁。为什么结果还是这样

import multiprocessing
import time

counter = 0
mutex = multiprocessing.Lock()


def run():
    global counter, mutex
    mutex.acquire()
    counter += 1
    mutex.release()
    print("set counter:%s" % counter)

def main():
    pool = multiprocessing.Pool(processes=100)
    for i in range(100):
        pool.apply_async(run)
    pool.close()
    pool.join()

if __name__ == "__main__":
    main()

 

 

 

 

 

set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:1
set counter:2
set counter:2
set counter:2
set counter:2
set counter:2
set counter:2
set counter:2
set counter:2
set counter:2
set counter:2

Process finished with exit code 0

你这个是多进程。

线程是thread

基本概念需要搞清楚。具体可以关注我,看看我写的python编程操作系统篇,还有相关多线程、多进程、协程的内容。

多进程数据安全,每个进程内部的变量相互隔离。

多线程数据不安全,每个线程共享使用的变量存在数据不安全的风险。

我把这个一句改成并称多线程 就好了pool = multiprocessing.dummy.Pool(processes=100)

这个是为什么