1/前言
multiprocessing模块可以实现多进程。因为multiprocessing模块中有Process()类和Pool()类。
这2个类都可以实例化成一个进程对象。
模块中的Pool()类可以实例化一个进程池,pool = multiprocessing.Pool(6)
其中的参数6是设置的最大同时执行的进程的个数,该参数的值,一般是<=服务器的核心的数量。
可以用在for循环的场景下.
apply_async(),类的函数,异步调用,非堵塞,需要使用.join()函数堵塞主进程。
def apply_async(self, func, args=(), kwds={}, callback=None,
error_callback=None):
'''
Asynchronous version of `apply()` method.
'''
if self._state != RUN:
raise ValueError("Pool not running")
result = ApplyResult(self._cache, callback, error_callback)
self._taskqueue.put(([(result._job, 0, func, args, kwds)], None))
return result
apply_async()是异步非堵塞的,也就是子进程不能堵塞主进程,需要使用join()函数才行。
2/demo
import multiprocessing
def func_callback(x):
with open('result.txt', 'a+') as f:
line = str(x) + "\n"
f.write(line)
def func_middle(num):
return num*(num+1)
if __name__ == '__main__':
pool = multiprocessing.Pool(6)
for i in range(1000):
pool.apply_async(func=func_middle, args=(i,), callback=func_callback)
pool.close()
pool.join()