# Time : 12/27/2018 9:53 AM
# Author : Luzaofa
import time
import types
import copy_reg
import multiprocessing as mp
def _pickle_method(m):
if m.im_self is None:
return getattr, (m.im_class, m.im_func.func_name)
else:
return getattr, (m.im_self, m.im_func.func_name)
copy_reg.pickle(types.MethodType, _pickle_method)
class Demo(object):
def __init__(self):
pass
def test(self, mass):
'''信息写入文件'''
with open('test.csv', 'a+') as f:
f.writelines(str(mass) + '\n')
def data_mp(self, func, mass):
'''进程池'''
pool = mp.Pool(processes=4)
for i in mass:
pool.apply_async(func, args=(i,))
pool.close()
pool.join()
def pb_main(self):
'''普通数据插入'''
start = time.time()
for i in range(10000):
self.test(i)
end = time.time()
print('总用时间:%s' % (end - start))
def mp_main(self):
'''进程池插入'''
start = time.time()
self.data_mp(self.test, [i for i in range(10000)])
end = time.time()
print('总用时间:%s' % (end - start))
if __name__ == '__main__':
demo = Demo()
demo.pb_main()
print '-----------------'
demo.mp_main()
2、普通插入与多线程类比结果:
代码如下:
# Time : 12/27/2018 9:53 AM
# Author : Luzaofa
import time
import threading
class MyThread(threading.Thread):
def __init__(self, func, args, name=''):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args
def run(self):
apply(self.func, self.args)
class Demo(object):
def __init__(self):
self.mass = [i for i in range(10000)]
def test(self, mass):
'''信息写入文件'''
with open('test.csv', 'a+') as f:
f.write(str(mass) + '\n')
f.flush()
def pb_main(self):
'''普通数据插入'''
start = time.time()
for i in range(10000):
self.test(i)
end = time.time()
print('总用时间:%s' % (end - start))
def td_main(self):
'''多线程'''
start = time.time()
threads = []
for i in self.mass:
t = MyThread(self.test, (i,), self.test.__name__)
threads.append(t)
for i in self.mass:
threads[i].start()
for i in self.mass:
threads[i].join()
end = time.time()
print('总用时间:%s' % (end - start))
if __name__ == '__main__':
demo = Demo()
demo.pb_main()
print '----------------------'
demo.td_main()