Python 多进程未在 Fedora 中创建新进程
Python multiprocessing not creating new processes in Fedora
我正在学习 Python 2.7 中的多处理。我在 Windows 7 和 Fedora 20 中都尝试了以下代码。
代码示例
import multiprocessing
import time
def worker():
name = multiprocessing.current_process().name
print name, 'Starting'
time.sleep(10)
print name, 'Exiting'
if __name__ == '__main__':
worker_1=multiprocessing.Process(target=worker)
worker_2=multiprocessing.Process(target=worker)
worker_1.start()
worker_2.start()
在任务管理器的 Windows-7 中,我可以看到 3 python 个进程 运行ning.
当在 Fedora-20 中使用命令 top | grep python
时,我只能看到一个 python 进程 运行ning.
难道在Linux中,操作系统不允许多处理?
如果多处理程序 运行 与普通程序一样,那么为什么人们更喜欢 multiprocessing
而不是 Threading
?
问题不在于 Python,而在于使用 top
命令。默认情况下,top 仅显示适合单个屏幕的进程。当您的工作进程处于睡眠状态时,它们占用的资源很少并且落后。因此,它们不会作为 grep
的结果出现。
您可以使用 ps aux
命令来验证工人是否已创建,或者您可以使用 top
的 -b
选项,用于重定向 top
的输出。
top -b | grep python
来自man top:
-b : Batch mode operation
Starts top in 'Batch mode', which could be useful for sending out-
put from top to other programs or to a file. In this mode, top
will not accept input and runs until the iterations limit you've
set with the '-n' command-line option or until killed.
我正在学习 Python 2.7 中的多处理。我在 Windows 7 和 Fedora 20 中都尝试了以下代码。
代码示例
import multiprocessing
import time
def worker():
name = multiprocessing.current_process().name
print name, 'Starting'
time.sleep(10)
print name, 'Exiting'
if __name__ == '__main__':
worker_1=multiprocessing.Process(target=worker)
worker_2=multiprocessing.Process(target=worker)
worker_1.start()
worker_2.start()
在任务管理器的 Windows-7 中,我可以看到 3 python 个进程 运行ning.
当在 Fedora-20 中使用命令 top | grep python
时,我只能看到一个 python 进程 运行ning.
难道在Linux中,操作系统不允许多处理?
如果多处理程序 运行 与普通程序一样,那么为什么人们更喜欢 multiprocessing
而不是 Threading
?
问题不在于 Python,而在于使用 top
命令。默认情况下,top 仅显示适合单个屏幕的进程。当您的工作进程处于睡眠状态时,它们占用的资源很少并且落后。因此,它们不会作为 grep
的结果出现。
您可以使用 ps aux
命令来验证工人是否已创建,或者您可以使用 top
的 -b
选项,用于重定向 top
的输出。
top -b | grep python
来自man top:
-b : Batch mode operation Starts top in 'Batch mode', which could be useful for sending out- put from top to other programs or to a file. In this mode, top will not accept input and runs until the iterations limit you've set with the '-n' command-line option or until killed.