0
点赞
收藏
分享

微信扫一扫

python编程(multiprocessing库)

    由于平时写多进程的机会不多,所以对这方面也不太重视。因此,一直没有把多进程的代码掌握好。其实,从心底里,我知道多进程还是有很多优点的,其中稳定性就是很重要的一条。现在用python写多进程,发现用multiprocessing库写起来一点也不难。

1、创建多进程

t = multiprocessing.Process(target = run_process)
t.start()

2、等待进程结束

t.join()

3、创建pipe

(p1, p2) = multiprocessing.Pipe()
data = p1.read()
p2.send(data)

4、创建锁

    多进程下面的锁多用来限制对某些文件的访问,用法如下,

l = multiprocessing.Lock()
l.acquire()
l.release()

5、创建信号量

    信号量是进程同步的好方法,实际使用的机会也很多,用法如下,

a = multiprocessing.Semaphore(0)
a.acquire()
a.release()

6、信号处理

    multiprocessing库是真正的多进程,用ps aux检测的时候可以发现确实有多个进程在运行。同样,发送给parent的信号也会发送给子进程,所以一般来说,信号函数都是公用的,

signal.signal(signal.SIGINT, sig_process)

7、完整范例

#!/usr/bin/python

import multiprocessing
import os
import time
import signal

g_exit = 0

def sig_process(sig, frame):
global g_exit
g_exit = 1

def send_process(p, l):
data = 0
while not g_exit:
p.send(data)
data += 1
l.release()
time.sleep(1)

l.release()
p.send(0)


def get_process(p, l):
while not g_exit:
l.acquire()
print p.recv()


def main():

signal.signal(signal.SIGINT, sig_process)
l = multiprocessing.Semaphore(0)
(p1, p2) = multiprocessing.Pipe()
t1 = multiprocessing.Process(target = send_process, args=(p1,l,))
t1.start()

t2 = multiprocessing.Process(target = get_process, args=(p2,l,))
t2.start()

while not g_exit:
time.sleep(3)

t2.join()
t1.join()


if __name__ == '__main__':
main()


举报

相关推荐

0 条评论