python学习多进程介绍

多进程的基本使用

import multiprocessing
import os
import time
def run():
print(“父进程:%s,子进程:%s” % (os.getppid(), os.getpid()))
time.sleep(2)
if __name__ == “__main__”:
p = multiprocessing.process(target=run)
p.start()
p.join()

进程间通信

不同进程间内存是不共享的,要实现两个进程间的数据交换,可以用以下方法

queue

import multiprocessing
def f(q):
q.put(11111)
if __name__ == “__main__”:
q = multiprocessing.queue()
p = multiprocessing.process(target=f, args=(q,))
p.start()
print(q.get())

pipe

import multiprocessing
def f(conn):
conn.send(1)
conn.send(2)
print(conn.recv())
conn.close()
if __name__ == “__main__”:
parent_conn, child_conn = multiprocessing.pipe()
p = multiprocessing.process(target=f, args=(child_conn,))
p.start()
print(parent_conn.recv())
print(parent_conn.recv())
parent_conn.send(3)
p.join()

进程间的数据共享

manager

import multiprocessing
import os
def func(d, l):
d[os.getpid()] = os.getpid()
print(d)
l.append(os.getpid())
print(l)
if __name__ == “__main__”:
manager = multiprocessing.manager()
d = manager.dict()
l = manager.list()
p_list = []
for i in range(5):
p = multiprocessing.process(target=func, args=(d, l))
p.start()
p_list.append(p)
for p in p_list:
p.join()

进程锁

当多个进程要访问共享资源时,lock可以避免访问冲突

import multiprocessing
def f(l, i):
l.acquire()
print(“hello world”, i)
l.release()
if __name__ == “__main__”:
lock = multiprocessing.lock()
for num in range(10):
p = multiprocessing.process(target=f, args=(lock, num))
p.start()

进程池

进程池内部维护一个进程队列,当使用时,则去进程池中获取一个进程,如果进程池中没有可使用的进程,那么程序就会等待,直到进程池中有进程

import multiprocessing
import os
import time
def foo(i):
time.sleep(2)
print(“in process”, os.getpid())
return i + 100
def bar(arg):
print(“==>exec done:”, arg)
if __name__ == “__main__”:
pool = multiprocessing.pool(5)
for i in range(10):
pool.apply_async(func=foo, args=(i,), callback=bar)
print(“end”)
pool.close()
pool.join()

以上就是 python学习多进程介绍的详细内容,更多请关注 第一php社区 其它相关文章!

Posted in 未分类

发表评论