python中的多线程和多进程编程
Posted zf-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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-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中的多线程和多进程编程的主要内容,如果未能解决你的问题,请参考以下文章