python中多线程和多进程用来干嘛_python中的多线程和多进程编程

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

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

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

举个例子:现在有一个16核的CPU,一个要执行的数据读取任务A,我们将A分成多个进程并行操作,每个进程放到一个核上;但是如果将这个任务A用一个进程(开多个线程)完成的话,虽然一个核心同一时间处理一个线程,按理说16核可以同时处理16个线程(未考虑超线程技术),但由于python的缺陷,这里面的多线程依然是并发(伪并行)的,所以效率低;

(1)多线程操作案例:

importthreadingclassMyThread(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_listdefrun(self):print("开始进程:" +self.thread_name)

main(self.person_list , self.thread_name)#main是自定义要进行多线程操作的函数

print("结束进程:" +self.thread_name)defmain(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 importPool , freeze_support#multi-processing

freeze_support()

pool=Pool(PROCESS_NUM)for i inrange(PROCESS_NUM):

pool.apply_async(func= main , args =(person_per_thread[i] , str(i) , ))#main是自定义的要进行多进程编程的函数

pool.close()

pool.join()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值