zoukankan      html  css  js  c++  java
  • python多进程

    用Python处理一些问题的时候,会发现运行的速度很慢,比如说读取多张图片数据,要比C++慢很多,但是如果可以使用多进程,那么速度上就会有提高。

    本文部分内容来自于(https://www.cnblogs.com/kaituorensheng/p/4445418.html)

    (在Windows上面使用多进程出现了一点问题,子进程里面的程序没有执行)在Linux系统之下,就没有出现这样的问题。

    1、启动多进程:

    import multiprocessing
    
    def worker(..):
        ...
    
    # 一个进程
    p = multiprocessing.Process(target = worker,args=(函数参数,))

    上面的worker是定义的函数,传入到args中的是函数的参数,注意最后加一个逗号是因为传入的tuple的数据类型。

    2、将进程定义为类

    class process_class(multiprocessing.Process):
        def __init__(self, ..):
            multiprocessing.Process.__init__(self)
                
        def run(self):
            ...
    
    p = process_class(..)
    p.start()

    上面p调用start()的时候,自动调用run()。

    3、daemon

    如果设置了

    p.daemon = True

    那么主进程结束之后,子进程就会随之结束。

    4、共享资源lock

    见前面的博客,多个进程访问共享资源的时候,Lock可以用来避免访问的冲突。

    5、Queue

    Queue是队列,有两个关键的method: put和get。

    put: 插入数据到队列中, put有两个可选的参数,blocked和timeout。如果blocked设置为True(默认值),并且timeout为正值,当Queue队列已经满的时候,会过timeout之后才会抛出Queue.Full异常。否则,则立即抛出Queue.Full异常。

    get: 队列读取并且删除一个元素。同样也有两个可选参数,blocked和timeout,类似上面。

  • 相关阅读:
    使用eclipse从github导入maven项目
    J2SE 8的Lambda --- Comparator
    J2SE 8的Lambda --- functions
    J2SE 8的Lambda --- 语法
    J2SE 8的流库 --- 收集处理结果
    J2SE 8的流库 --- 转换流, 得到的还是流
    J2SE 8的流库 --- 基本类型流的使用
    J2SE 8的流库 --- 生成流
    Hadoop 3.0 安装
    程序员到底要不要读研,过来人给你几点建议!
  • 原文地址:https://www.cnblogs.com/yanxingang/p/10901061.html
Copyright © 2011-2022 走看看