python 示例说明如何将实例方法与多处理模块一起使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 示例说明如何将实例方法与多处理模块一起使用相关的知识,希望对你有一定的参考价值。

from multiprocessing import Pool
from functools import partial

def _pickle_method(method):
	func_name = method.im_func.__name__
	obj = method.im_self
	cls = method.im_class
	if func_name.startswith('__') and not func_name.endswith('__'): #deal with mangled names
		cls_name = cls.__name__.lstrip('_')
		func_name = '_' + cls_name + func_name
	return _unpickle_method, (func_name, obj, cls)

def _unpickle_method(func_name, obj, cls):
	for cls in cls.__mro__:
		try:
			func = cls.__dict__[func_name]
		except KeyError:
			pass
		else:
			break
	return func.__get__(obj, cls)

import copy_reg
import types
copy_reg.pickle(types.MethodType, _pickle_method, _unpickle_method)

class someClass(object):
	def __init__(self):
		pass
	
	def f(self, x=None):
		#can put something expensive here to verify CPU utilization
		if x is None: return 99
		return x*x

	def go(self):
		pool = Pool()             
		print pool.map(self.f, range(10))

if __name__=='__main__':
	sc = someClass()
	sc.go()
	x=[someClass(),someClass(),someClass()]
	p=Pool()
	filled_f=partial(someClass.f,x=9)
	print p.map(filled_f,x)
	print p.map(someClass.f,x)

以上是关于python 示例说明如何将实例方法与多处理模块一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫提速小技巧,多线程与多进程(附源码示例)

Python线程队列与多处理管道

Python 3 中的 Concurrent.futures 与多处理

iOS与多线程(十) —— NSThread的使用以及锁(一)

基于Python的多线程与多进程

Python之mmap内存映射模块(大文本处理)说明