1、进程简介
io密集型的尽量使用多线程,如socketserver.
multiprocessing模块可以使用一些简单的API批量生生进程,可以实现本地和远程进程间同步,通过使用子进程而不是线程来有效避开了全局解释器锁GIL,因此,该multiprocessing
模块允许程序员在给定机器上充分利用多个处理器。它可以在Unix和Windows上运行。
一个简单的例子如下:
from multiprocessing import Process
def f(name):
print 'hello', name
if __name__ == '__main__':
p = Process(target=f, args=('bob',))
p.start()
p.join()
为了显示所涉及的各个进程ID,下面是一个扩展的示例:
# -*- coding: utf-8 -*-
#@Author: kangdan
#@time :2019/12/12 10:42
#@Software:PyCharm Community Edition
from multiprocessing import Process
import os
def info(title):
print(title)
print('module name:', __name__)
if hasattr(os, 'getppid'): # only available on Unix
print('parent process:', os.getppid())
print('process id:', os.getpid())
def f(name):
info('function f')
print('hello', name)
if __name__ == '__main__':
info('main line')
p = Process(target=f, args=('bob',))
p.start()
p.join()
输出:
2、进程间通讯和数据共享
不同进程间内存是不共享的,要想实现两个进程间的数据交换,可以用以下方法:
2.1、Queue队列
队列是线程和进程安全的。