Python多进程机制实例详解
什么是进程?
进程是指在操作系统中独立运行的一个程序,一个程序可以拥有多个进程。
为什么使用多进程?
多进程可以提高程序运行效率,因为多个进程可以同时运行。此外,多进程可以让程序更加稳定,如果一个进程崩溃了,其它进程还可以继续运行。
如何使用Python实现多进程?
使用Python内置的multiprocessing模块可以非常方便地实现多进程。
方法一:使用Process类
import multiprocessing
def func(num):
print("Process {} started".format(num))
if __name__ == '__main__':
# 创建10个进程
for i in range(10):
p = multiprocessing.Process(target=func, args=(i,))
p.start()
上述代码使用Process类创建了10个进程,每个进程都执行了func函数。这里需要注意的是,必须要在if name == 'main':语句块中创建进程,否则会出现运行时错误。
方法二:使用Pool类
import multiprocessing
def func(num):
print("Process {} started".format(num))
if __name__ == '__main__':
# 创建进程池,最多有10个进程同时执行
p = multiprocessing.Pool(10)
# 向进程池中添加任务
for i in range(10):
p.apply_async(func, args=(i,))
# 关闭进程池
p.close()
p.join()
上述代码使用Pool类创建了一个含有10个进程的进程池,每个进程都可以执行func函数。其中,p.apply_async方法用于向进程池中添加任务,close和join方法则用于结束进程池中的进程。
示例一:使用多进程计算斐波那契数列
下面的代码演示了如何使用多进程计算斐波那契数列。
import multiprocessing
def fibonacci(num):
a, b = 0, 1
for i in range(num):
a, b = b, a + b
return a
if __name__ == '__main__':
pool = multiprocessing.Pool(4)
results = []
for i in range(1, 11):
result = pool.apply_async(fibonacci, args=(i,))
results.append(result)
pool.close()
pool.join()
for result in results:
print(result.get())
上述代码使用Pool类创建了一个含有4个进程的进程池,然后使用该进程池计算了1到10位斐波那契数列。运行结果如下:
1
1
2
3
5
8
13
21
34
55
从结果可以看出,斐波那契数列计算是并行执行的,可以有效提高运行效率。
示例二:使用多进程下载图片
下面的代码演示了如何使用多进程下载图片。
import requests
import multiprocessing
def download(url, file_name):
response = requests.get(url)
with open(file_name, 'wb') as f:
f.write(response.content)
if __name__ == '__main__':
urls = ['https://www.python.org/static/community_logos/python-logo.png',
'https://www.python.org/static/community_logos/python-powered-w-200x80.png']
file_names = ['python_logo.png', 'python_powered.png']
pool = multiprocessing.Pool(2)
for url, file_name in zip(urls, file_names):
pool.apply_async(download, args=(url, file_name))
pool.close()
pool.join()
print("Download completed.")
上述代码使用Pool类创建了一个含有2个进程的进程池,然后使用该进程池下载了两张图片。运行结果如下:
Download completed.
从结果可以看出,两张图片是并行下载的,可以有效提高下载速度。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python多进程机制实例详解 - Python技术站