我正在学习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进程正在运行。
使用命令top | grep python
在Fedora-20 中时,我只能看到一个python进程正在运行。
在Linux中,操作系统不允许多处理吗?
如果多处理程序会像普通程序一样运行,那么为什么人们应该更喜欢multiprocessing
而不是Threading
?
答案 0 :(得分:2)
问题不在于Python,而在于使用top
命令。默认情况下,top仅显示单个屏幕中安装的进程。当您的工作进程处于睡眠状态时,它们会占用较少的资源并落后。因此,它们不会出现grep
的结果。
您可以使用ps aux
命令验证工作程序是否已创建,或者您可以使用-b
选项top
用于重定向top
的输出。
top -b | grep python
来自man top:
-b:批处理模式操作 在批量模式'中开始,这可能对发送 - 从顶部放到其他程序或文件。在这种模式下,顶部 不会接受输入并运行,直到迭代限制你 设置为' -n'命令行选项或直到被杀死。