加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

需要在Windows / Python中快速创建大量新进程

发布时间:2020-12-14 05:46:31 所属栏目:Windows 来源:网络整理
导读:为了测试一些安全软件,我需要能够在 Windows中创建一个大的(可配置的)新进程(不是线程!),非常快,让它们存在一段(可配置的)时间,然后干净地终止.这些过程根本不应该做任何事情 – 只存在指定的持续时间. 最终,我希望能够运行如下: C: python process_gener
为了测试一些安全软件,我需要能够在 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秒内完成
> 1.个过程在1.45秒内完成
在3.68秒内完成> 50个过程
> 14个过程在14秒内完成
> 43个过程在43秒内完成
> 77个过程在77秒内完成
> 111个过程在111秒内完成

这不是我的预期 – 我希望能够以合理线性的方式扩展并行进程计数,直到我遇到瓶颈,但我似乎几乎是直接打击了进程创建的瓶颈.根据我运行的第一个代码,我肯定希望在遇到进程创建瓶颈之前能够创建接近70个进程/秒的东西.

没有完整的规格,笔记本电脑运行完全修补的Windows XP,具有4Gb RAM,否则是空闲的,是相当新的;我认为这不会很快成为瓶颈.

我在使用我的代码做了什么明显的错误,或者在12个月大的笔记本电脑上创建的XP / Python并行进程是否真的效率低下?

解决方法

嗯,Windows进程管理并不能很好地扩展.进程越多,将新的进程插入调度所需的时间就越长.

现在将其与其他操作系统内核进行比较,例如Linux,其中进程创建实际上是O(1)(常量时间),因为内核2.6.8(当引入了调度程序时).

请注意,我不打算在这里向你推销Linux.我建议您在不同的操作系统上试用您的程序,亲眼看看.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读