Difference between Process.run() and Process.start()(Process.run() 和 Process.start() 之间的区别)
问题描述
我很难理解 run() 和
start()
之间的区别.根据文档, run()
方法调用传递给对象构造函数的可调用对象,而 start()
方法启动进程并且只能调用一次.
I am struggling to understand the difference between run()
and start()
. According to the documentation, run()
method invokes the callable object passed to the object's constructor, while start()
method starts the process and can be called only once.
我尝试了以下示例:
def get_process_id(process_name):
print process_name, os.getpid()
p1 = multiprocessing.Process(target=get_process_id, args=('process_1',))
p2 = multiprocessing.Process(target=get_process_id, args=('process_2',))
p1.run()
p2.run()
p1.start()
p2.start()
结果如下:
process_1 35138
process_2 35138
process_1 35141
process_2 35142
当我使用 run()
时,它表明 p1
和 p2
使用相同的过程.但是当我使用 start()
时,他们给出了两个不同的.是不是因为调用 run()
与调用它的进程没有任何关系,只是调用函数(本例中为 get_process_id
)?p>
When I use run()
, it shows that p1
and p2
uses the same process. But when I use start()
, they give the two difference ones. Is it because calling run()
doesn't have anything to do with the process that calls it but just calling the function (which is get_process_id
in this example)?
推荐答案
你不应该显式调用 process.run()
.它是调用您指定的 target
函数的方法,除非您在子类化 Process
时重写它.它通常在引导时在新子代中被调用.它除了调用目标函数之外什么都不做.
You are not supposed to call process.run()
explicitly. It's the method which invokes your specified target
function unless you override it when you subclass Process
. It normally gets called within the new child while it bootstraps. It does nothing else than calling the target function.
# multiprocessing.process.BaseProcess
def run(self):
'''
Method to be run in sub-process; can be overridden in sub-class
'''
if self._target:
self._target(*self._args, **self._kwargs)
当您在父进程中调用它时,它会像任何其他方法一样在您的父进程中执行.
When you call it in your parent process, it gets executed in your parent process like any other method.
process.start()
是您应该首先在父进程中调用以创建新进程的方法.
process.start()
is the method which you're supposed to call in your parent to create the new process in the first place.
这篇关于Process.run() 和 Process.start() 之间的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Process.run() 和 Process.start() 之间的区别
基础教程推荐
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 筛选NumPy数组 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01