python中的多线程和多进程编程

注意:多线程和多线程编程是不同的!!!

第一点:一个进程相当于一个要执行的程序,它会开启一个主线程,多线程的话就会再开启多个子线程;而多进程的话就是一个进程同时在多个核上进行;

第二点:多线程是一种并发操作(伪并行),它相当于把CPU的时间片分成一段一段很小的片段,然后分给各个线程交替进行,由于每个片段都很短,所以看上去像平行操作;

(1)多线程操作案例:

import threading

class MyThread(threading.Thread):
    def __init__(self , thread_ID , thread_name , person_list):
        threading.Thread.__init__(self)
        self.thread_ID = thread_ID
        self.thread_name = thread_name
        self.person_list = person_list
    def run(self):
        print("开始进程:" + self.thread_name)
        main(self.person_list , self.thread_name)  #main是自定义要进行多线程操作的函数
        print("结束进程:" + self.thread_name)

def main(person_list , thread_name):
    ......
#multi-threadmulti_thread = []for i in range(THREAD_NUM):    multi_thread.append(MyThread(i , "Thread_" + str(i) , person_per_thread[i]))for i in range(THREAD_NUM):    multi_thread[i].start()  #start只是开启了多线程,之后会自动发起线程模块中的run操作;print("{} start!".format(time.ctime(time.time())))for i in range(THREAD_NUM):    multi_thread[i].join()  #join()是为了保证主线程在多线程开启的子线程都结束后再结束,这样子可以防止主线程在子线程结束前结束,一般join都和start配合使用

(2)多进程操作案例:

可以直接使用python库:Pool进程池;

from multiprocessing import Pool , freeze_support

#multi-processing
    freeze_support()
    pool = Pool(PROCESS_NUM)
    for i in range(PROCESS_NUM):
        pool.apply_async(func = main , args = (person_per_thread[i] , str(i) , ))
    #main是自定义的要进行多进程编程的函数
    pool.close()
    pool.join()

原文地址:https://www.cnblogs.com/zf-blog/p/10772879.html

时间: 2024-11-06 21:05:18

python中的多线程和多进程编程的相关文章

14-08-07 关于程序、进程、线程,以及python中实现多线程的办法

考核题目中涉及到多线程编程,于是复习了一下系统编程里面的各种概念. 首先,程序是代码,没有活动.通过编译连接之后被加载到内存里运行时,内存活动的就是进程,这里的进程不仅仅是代码段,还包括涉及的数据等.而线程是在同一个进程下的小程序,它们可以"同时"地运行,其中会有一个主线程来控制. 接下来是多线程或着多进程的实现,两者原理基本一样,都是把CPU的时间分片然后进行分配给某个进程或者线程,也就是说在同一个时间只会有一个线程在使用CPU,但是CPU切换线程的频率非常快使得它们看上去是在同一个

Python系列之多线程、多进程

一.python多线程 线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程. Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装.绝大多数情况下,我们只需要使用threading这个高级模块. import threading import time def f1(num)

python分别使用多线程和多进程获取所有股票实时数据

python分别使用多线程和多进程获取所有股票实时数据 前一天简单介绍了python怎样获取历史数据和实时分笔数据,那么如果要获取所有上市公司的实时分笔数据,应该怎么做呢? 肯定有人想的是,用一个列表存储所有上市公司的股票代号,然后无限循环获取不就得了吗? 现在深市和沪市的股票一共有3400多只,如果你真这样做的话,获取一次所有股票的实时数据需要十几二十秒的时间,甚至更多,而且非常容易因为等待超时而使程序挂掉,如果你的模型对实时数据的质量要求非常高,这肯定是不行的,即使不考虑数据质量,获取数据的

python中的多线程

一个程序可以理解为一个进程,这个进程有其代号,可以依据这个代号将其杀死. 一个进程肯定有且只有一个主线程,他可以有很多子线程. 运行一个任务如果可以有许多子线程同时去做,当然会提高效率. 但是,在python中,多线程其实不是严格意义上的多线程. 因为,python有一个全局锁的概念,它保证在某一个时间节点上,只能存在一个线程在运行,只是这个时间节点非常短,人类意识不到. 所以说,Python的多线程其实就是不断地切换进程,而没有把所有的进程在同一时间同时运行. 注意,切换进程并不是依据什么顺序

python中的多线程【转】

转载自: http://c4fun.cn/blog/2014/05/06/python-threading/ python中关于多线程的操作可以使用thread和threading模块来实现,其中thread模块在Py3中已经改名为_thread,不再推荐使用.而threading模块是在thread之上进行了封装,也是推荐使用的多线程模块,本文主要基于threading模块进行介绍.在某些版本中thread模块可能不存在,要使用dump_threading来代替threading模块. 线程创

python中的Queue与多进程(multiprocessing)

最近接触一个项目,要在多个虚拟机中运行任务,参考别人之前项目的代码,采用了多进程来处理,于是上网查了查python中的多进程 一.先说说Queue(队列对象) Queue是python中的标准库,可以直接import 引用,之前学习的时候有听过著名的"先吃先拉"与"后吃先吐",其实就是这里说的队列,队列的构造的时候可以定义它的容量,别吃撑了,吃多了,就会报错,构造的时候不写或者写个小于1的数则表示无限多 import Queue q = Queue.Queue(10

python多线程,多进程编程。

程,是目前计算机中为应用程序分配资源的最小单位: 进程,是目前计算机中运行应用程序的最小单位: 在实际系统中,其实进程都是被分为进程来实现的,所以参与时间片轮转的是线程: 但是管理应用程序的资源的单位和任务调度的单位都是进程.更像是一个逻辑概念. 线程是进程分出来的更精细的单位,线程间的上下文切换比进程间的上下文切换,要快很多. 多进程与多核,这个概念很奇怪,因为进程是不会直接在核心上运行的. 多线程与多核,涉及一个内核线程与用户线程的对应关系. 内核线程(Kernel Thread),一般与核

python中的oop面向对象基本编程(类、实例、魔术)

                  OOP面向对象(老师说这玩意蕴含基本哲学哦!!) 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.数据封装.继承和多态是面向对象的三大特点. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度. 而面向对象的程序设计把

python中threading多线程

python中有两个处理多线程的模块thread和threading.其中thread提供了多线程底层支持的模块,以低级原始的发那个是来处理和控制线程,使用起来较为复杂:而threading基于thread进行包装,将线程操作对象化. 最基础的的多线程 我们先看一个最最基础的多线程例子 import threading import time class test(threading.Thread): def __init__(self,name,delay): threading.Thread