需要在Windows / Python中快速创建大量新进程
为了测试一些安全软件,我需要能够在
Windows中创建一个大的(可配置的)新进程(不是线程!),非常快,让它们存在一段(可配置的)时间,然后干净地终止.这些过程根本不应该做任何事情 – 只存在指定的持续时间.
最终,我希望能够运行如下: C:&; python process_generate.py --processes=150 --duration=2500 它可以非常快速地创建150个新进程,使它们在2500毫秒内保持活动状态,然后让它们尽快终止. 作为一个起点,我跑了 from multiprocessing import Process import os def f(): pass if __name__ == '__main__': import datetime count = 0 startime = datetime.datetime.now() while True: p = Process(target=f) p.start() p.terminate() count += 1 if count % 1000 == 0: now = datetime.datetime.now() print "Started & stopped d processes in %s seconds" % (count,str(now-starttime)) 并且发现我可以在笔记本电脑上连续创建和终止大约70个进程/秒,创建的进程会立即终止.约70个过程/秒速率持续约一小时的持续时间. 当我将代码更改为 from multiprocessing import Process import os import time def f_sleep(): time.sleep(1) if __name__ == '__main__': import datetime starttime = datetime.datetime.now() processes = [] PROCESS_COUNT = 100 for i in xrange(PROCESS_COUNT): p = Process(target=f_sleep) processes.append(p) p.start() for i in xrange(PROCESS_COUNT): processes[i].terminate() now = datetime.datetime.now() print "Started/stopped %d processes in %s seconds" % (len(processes),str(now-starttime)) 并为PROCESS_COUNT尝试了不同的值,我预计它会比它更好地扩展.我得到了不同的PROCESS_COUNT值的以下结果: > 20个过程在0.72秒内完成 这不是我的预期 – 我希望能够以合理线性的方式扩展并行进程计数,直到我遇到瓶颈,但我似乎几乎是直接打击了进程创建的瓶颈.根据我运行的第一个代码,我肯定希望在遇到进程创建瓶颈之前能够创建接近70个进程/秒的东西. 没有完整的规格,笔记本电脑运行完全修补的Windows XP,具有4Gb RAM,否则是空闲的,是相当新的;我认为这不会很快成为瓶颈. 我在使用我的代码做了什么明显的错误,或者在12个月大的笔记本电脑上创建的XP / Python并行进程是否真的效率低下? 解决方法
嗯,Windows进程管理并不能很好地扩展.进程越多,将新的进程插入调度所需的时间就越长.
现在将其与其他操作系统内核进行比较,例如Linux,其中进程创建实际上是O(1)(常量时间),因为内核2.6.8(当引入了调度程序时). 请注意,我不打算在这里向你推销Linux.我建议您在不同的操作系统上试用您的程序,亲眼看看. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows – Powershell Get-Process负内存值
- windows-server-2012 – 重新安装(修复)Server 2012角色和功
- cmd – Windows 10托管网络=“否”,如何强制是
- 使用NetTcpBinding在WCF中进行Windows身份验证/加密
- windows-7 – 我需要做什么以及为Windows Vista / 7(32位和
- 什么版本的SignalR支持WebSockets?
- 当我尝试在Windows / Cygwin上使用Ansible配置Vagrant VM时
- windows – 如何检测表单何时最大化?
- 如何在Cygwin Windows中的HTTPS URL上运行wget时修复证书错
- 在Windows XP上从压缩标准库中嵌入Python 3.3