多进程5

多进程5

本文展示在多进程中创建与使用共享变量和锁的步骤。

共享变量

import multiprocessing as mp
import time


def job(v, add_num):
    for i in range(10):
        time.sleep(0.1)
        v.value += add_num
        print(v.value)


def by_multiprocess():
    v = mp.Value('i', 0)
    process1 = mp.Process(target=job, args=(v, 1))
    process2 = mp.Process(target=job, args=(v, 5))
    process1.start()
    process2.start()
    process1.join()
    process2.join()


if __name__ == '__main__':
    by_multiprocess()
    print('over')

输出结果:

5
6
77

12
12
1313

1818

19
24
2525

2626

2727

2828

over

代码中设置共享变量v,初始值为0,两个进程分别对它进行10次+1或者+5的操作并打印,从结果来看,两个进程在竞争着操作变量v。

进程的共享变量v和多线程4中的global变量类似。

进程与线程还有一个类似的地方就是锁,以下代码使用了锁:

import multiprocessing as mp
import time


def job(v, add_num, lock):
    lock.acquire()
    for i in range(10):
        time.sleep(0.1)
        v.value += add_num
        print(v.value)
    lock.release()

def by_multiprocess():
    l = mp.Lock()
    v = mp.Value('i', 0)
    process1 = mp.Process(target=job, args=(v, 1, l))
    process2 = mp.Process(target=job, args=(v, 5, l))
    process1.start()
    process2.start()
    process1.join()
    process2.join()


if __name__ == '__main__':
    by_multiprocess()
    print('over')

输出结果:

1
2
3
4
5
6
7
8
9
10
15
20
25
30
35
40
45
50
55
60
over

加上锁后,一个进程执行完毕才会执行其他进程。

上一篇:[命令行] curl查询本机公网出口IP


下一篇:与Java中的@Override相反的标记