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() 之间的区别
基础教程推荐
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
