Python使用multiprocessing实现多进程_python多进程multiprocessing-CSDN博客
使用场景
在计算密集型场景下使用进程来实现,因为进程跳过了全局解释器锁(GIL:确保了任何时候只有一个Python线程在执行Python字节码)实现了对CPU多核的利用,实现真正的并行运行。 而且进程是计算机下的应用实例,有自己独立的执行环境和内存空间。
创建进程
import multiprocessing def worker(): # 进程执行的逻辑 if __name__ == '__main__': process = multiprocessing.Process(target=worker)
参数说明:
1. group
- 类型:通常为
None
- 说明:该参数用于兼容
threading.Thread
,但在multiprocessing
模块中,它应该始终是None
,因为进程没有组的概念。
2. target
- 类型:可调用对象(如函数)
- 说明:这是子进程启动时将要调用的对象。它应该是一个函数或者实现了
__call__
方法的对象。
3. name
- 类型:字符串
- 说明:进程的名称。如果不指定,则默认为
Process-N
,其中N
是一个递增的整数。
4. args
- 类型:元组
- 说明:传递给
target
函数的位置参数。这是一个元组,其中的元素将作为target
函数的参数。
5. kwargs
- 类型:字典
- 说明:传递给
target
函数的关键字参数。这是一个字典,其中的键值对将作为target
函数的关键字参数。
6. daemon
- 类型:布尔值
- 说明:设置进程是否为守护进程。如果是默认值
None
,则该标志将从创建的进程继承。守护进程在主进程终止时会自动终止,且不能创建自己的新进程。这个参数必须在进程启动(即调用start()
方法)之前设置。
方法
- start():启动进程,并调用该子进程中的
obj.run()
方法。 - run():进程启动时运行的方法,正是它去调用
target
指定的函数。如果子类化Process
并覆盖了run()
方法,那么应该在该方法中实现进程的行为。 - terminate():强制终止进程,不会进行任何清理操作。如果进程创建了子进程,那么这些子进程将成为僵尸进程。使用这个方法需要特别小心。
- is_alive():如果进程仍然运行,则返回
True
。 - join([timeout]):主线程等待子进程终止。
timeout
是可选的超时时间。如果指定了timeout
,那么主线程将等待最多timeout
秒。