Python 多进程

需求:
   在有多线程的情况下,我们可以使用线程帮我们处理一些事情,但是在python这里 由于RSA锁的缘故,我们只能够用到一个cpu帮我们处理事情,一个cpu在处理多个线程时,是通过上下文的切换使我们产生幻觉,感觉他同时在处理多个线程,但是在这里cpu在进行上下问的切换也是要消耗cpu。cpu是处理计算的 如1+1的计算。io操作不占用cpu,io只做网络,磁盘,内存中读取数据。所以python多线程 不适合CPU密集操作行的任务,python更适合io密集型的任务。
 
 
方案:
  这里可以使用进程,采取多进程的方式,可以使用到,多核的其他CPU,但是由于进程的原因,是不能共享数据的。
 
 
参数:
  multiprocessing.Process(target=函数, args=('参数',)) #生成一个进程
  注:Linux 每一个进程都是由父进程启动的。
  注:每一个进程默认都有一个父进程。
 
 
多进程模板:
import multiprocessing
import time
def f(name):
    time.sleep(2)
    print('hello', name)

if __name__ == '__main__':

    # 生成一个进程实例
    p = multiprocessing.Process(target=f, args=('bob',))

    # 启动一个进程
    p.start()

    # 等待一个进程完成
    p.join()
 
 
多进程查看,主进程与子进程PID:
from multiprocessing import Process
import os

def info(title):
    print(title)

    # 打印模块名
    print('module name:', __name__)

    # 打印父进程ID
    print('parent process:', os.getppid())

    # 打印自己的ID
    print('process id:', os.getpid())
    print("\n\n")

def f(name):

    # 子进程调用info
    info('\033[31;1mfunction f\033[0m')
    print('hello', name)

if __name__ == '__main__':

    # 主进程调用info
    info('\033[32;1mmain process line\033[0m')
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()
posted @ 2018-01-03 18:15  kevin.Xiang  阅读(234)  评论(0编辑  收藏  举报