python中的多线程和多进程编程(代码片段)

zf-blog zf-blog     2022-11-30     359

关键词:

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

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

第二点:多线程是一种并发操作(伪并行),它相当于把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-thread
multi_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()

 

python多进程编程(代码片段)

python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供了非常好用的多进程包multiprocessing,只需要定义一个函数,Python会完成其他所有事情... 查看详情

多进程和多线程(代码片段)

...运行几个进程、多个进程可以通过上下文切换进行调度。python里的多线程同时也只有一个线程在运行、利用不了多核cpu--全局解释器锁GLI。1、CPU密集型任务,用多进程 ->消耗CPU比较多2、IO密集型任务,用多线程 ->消... 查看详情

python爬虫编程思想(143):项目实战:多线程和多进程爬虫(代码片段)

         首先来学习使用多线程实现爬虫,这个案例抓取了豆瓣音乐Top250排行榜,只是本例去除去了将提取的结果保存为文件的功能,仅仅将提取的结果输出到Console上。本例使用了4个线程同时抓... 查看详情

python爬虫编程思想(142):多线程和多进程爬虫--多进程(代码片段)

        尽管多线程可以实现并发执行,不过多个线程之间是共享当前进程的内存的,也就是说,线程可以申请到的资源有限。要想更能发挥并发的作用,可以考虑使用多进程。     ... 查看详情

python爬虫编程思想(140):多线程和多进程爬虫--信号量(代码片段)

        从前面的例子可以看出,线程锁非常容易理解和实现,也很容易决定何时需要它们,然而,如果情况更加复杂,就可能需要更强大的技术配合线程锁一起使用。本节要介绍的信号量就是这种技... 查看详情

python爬虫编程思想(136):多线程和多进程爬虫--thread类与线程函数(代码片段)

        在前面的文章中使用锁(Lock)检测线程是否释放,以及使用锁可以保证所有的线程函数都执行完毕再往下执行。如果使用Thread类处理线程就方便得多了,可以直接使用Thread对象的join方法等待... 查看详情

python复习—并发编程实战——多线程和多进程的生产者消费者模型线程进程再总结(代码片段)

任务生产者负责生产数据(随机生成一个数字),消费者负责处理数据(判断生产出来的数据是不是质数)。现在假设有一个生产者和多个消费者。1.多线程(Thread)的生产者消费者模型importrandomimportti... 查看详情

关于进程,线程,多进程和多线程的网络编程(代码片段)

进程线程网络多任务编程:可以有效的利用计算机资源,同时执行多个任务进程:进程就是程序在计算机中一次执行的过程进程和程序的区别:程序是一个静态文件的描述,不占计算机的系统资源进程是一个动态的过程,占有cpu... 查看详情

并发编程之多进程(实践)(代码片段)

Python多进程模块multiprocessing模块介绍python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。Python提供了multiprocessing。multiprocessing模块用来开启子进程,... 查看详情

强化学习技巧三:python多进程(代码片段)

1.Python多进程模块Python中的多进程是通过multiprocessing包来实现的,和多线程的threading.Thread差不多,它可以利用multiprocessing.Process对象来创建一个进程对象。这个进程对象的方法和线程对象的方法差不多也有start(),run(),join()... 查看详情

python爬虫编程思想(141):多线程和多进程爬虫--生产者-消费者问题与queue模块(代码片段)

    本文使用线程锁以及队列来模拟一个典型的案例:生成者-消费者模型。在这个场景下,商品或服务的生产者生成商品,然后将其放到类似队列的数据结构中,生产商品的时间是不确定的,同样消费者消费生产... 查看详情

python多进程和多线程的使用(代码片段)

文章目录1.Python多进程创建使用2.进程的编号id3.Processname参数(进程名)4.多进程的参数args和kwargs5.进程之间不共享全局变量6.守护进程7.多线程7.1线程介绍7.2多线程实现方式8.线程的无序执行9.守护线程10.线程之间共享全局变量11.线... 查看详情

python多进程和多线程(代码片段)

文章目录一、进程与线程二、多进程与多线程三、python多进程与多线程一、进程与线程进程是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存线程是进程的基本... 查看详情

并发编程之多进程操作(代码片段)

一multiprocessing模块介绍??Python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。??multiprocessing模块用来开启子进程并在子进程中执行我们定制的任务(如... 查看详情

python爬虫编程思想(137):多线程和多进程爬虫--thread类与线程对象(代码片段)

        Thread类构造方法的target关键字参数不仅可以是一个函数,还可以是一个对象,我们可以称这个对象为线程对象。其实线程调用的仍然是函数,只是这个函数用对象进行了封装。这么做的好处是... 查看详情

进程相关操作(代码片段)

python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。Python提供了multiprocessing。multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(... 查看详情

python爬虫编程思想(138):多线程和多进程爬虫--从thread类继承(代码片段)

        为了更好地对与线程有关的代码进行封装,可以从Thread类派生一个子类。然后将与线程有关的代码都放到这个类中。Thread类的子类的使用方法与Thread相同。从Thread类继承最简单的方式是在子类... 查看详情

python爬虫编程思想(138):多线程和多进程爬虫--从thread类继承(代码片段)

        为了更好地对与线程有关的代码进行封装,可以从Thread类派生一个子类。然后将与线程有关的代码都放到这个类中。Thread类的子类的使用方法与Thread相同。从Thread类继承最简单的方式是在子类... 查看详情