下面是关于Python实现自定义多线程多进程类的完整攻略。
标准的Python多线程多进程实现
Python内置了threading和multiprocessing两个模块来实现多线程和多进程。
多线程示例
import threading
class MyThread(threading.Thread):
def __init__(self, name):
super().__init__(name=name)
def run(self):
print('Thread {} is running'.format(self.name))
if __name__ == '__main__':
threads = []
for i in range(5):
t = MyThread(str(i))
t.start()
threads.append(t)
for t in threads:
t.join()
这个示例创建了一个名为MyThread的自定义线程类,重写了父类的run()方法,创建5个线程并运行它们。
多进程示例
import multiprocessing
class MyProcess(multiprocessing.Process):
def __init__(self, name):
super().__init__(name=name)
def run(self):
print('Process {} is running'.format(self.name))
if __name__ == '__main__':
processes = []
for i in range(5):
p = MyProcess(str(i))
p.start()
processes.append(p)
for p in processes:
p.join()
这个示例创建了一个名为MyProcess的自定义进程类,同样是重写了父类的run()方法,创建5个进程并运行它们。
自定义多线程多进程类实现
自定义ThreadPool示例
import threading
import queue
class ThreadPool:
def __init__(self, max_workers):
self.max_workers = max_workers
self.work_queue = queue.Queue()
self.threads = []
for i in range(max_workers):
t = threading.Thread(target=self.worker)
t.start()
self.threads.append(t)
def worker(self):
while True:
try:
func, args, kwargs = self.work_queue.get()
func(*args, **kwargs)
self.work_queue.task_done()
except queue.Empty:
break
def submit(self, func, *args, **kwargs):
self.work_queue.put((func, args, kwargs))
def wait(self):
self.work_queue.join()
这个示例创建了一个名为ThreadPool的自定义线程池类,有一个worker()方法用于执行队列中的任务,一个submit()方法用于向队列中添加任务。可以看到,这个示例中同样实现了重写父类的run()方法,在worker()方法中被调用。
自定义ProcessPool示例
import multiprocessing
import queue
class ProcessPool:
def __init__(self, max_workers):
self.max_workers = max_workers
self.work_queue = multiprocessing.Manager().Queue()
self.processes = []
for i in range(max_workers):
p = multiprocessing.Process(target=self.worker)
p.start()
self.processes.append(p)
def worker(self):
while True:
try:
func, args, kwargs = self.work_queue.get()
func(*args, **kwargs)
self.work_queue.task_done()
except queue.Empty:
break
def submit(self, func, *args, **kwargs):
self.work_queue.put((func, args, kwargs))
def wait(self):
self.work_queue.join()
这个示例则创建了一个名为ProcessPool的自定义进程池类,同样有一个worker()方法,用于执行队列中的任务,一个submit()方法用于向队列中添加任务。实现方式跟自定义ThreadPool很类似。
总结
本文介绍了Python内置的多线程多进程实现方式,以及自定义多线程多进程的方式。采用队列的方式实现多线程/多进程池可以很好地提高应用的并发处理能力。在实际项目中,可根据业务场景选择不同的实现方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现的自定义多线程多进程类示例 - Python技术站