如何减少python中的运行时间?

1 python algorithm performance networking operating-system

我有以下程序生成1亿个mac并将其附加到列表中.

但1亿mac的生成和插入本身需要约7分钟的python ???

    import datetime
    def mac_gen():
    hex_byte1=0
    hex_byte2=0
    hex_byte3=0
    hex_byte4=0
    hex_byte5=0
    hex_byte6=0
    hex_byte7=0
    hex_byte8=0
    hex_byte9=0
    hex_byte10=0
    hex_byte11=0
    hex_byte12=0
    total_mac = 0
    for hex_byte_12 in range(0,16):
        for hex_byte11 in range(0,16):
            for hex_byte10 in range(0,16):
                for hex_byte9 in range(0,16):
                    for hex_byte8 in range(0,16):
                        for hex_byte7 in range(0,16):
                            for hex_byte6 in range(0,16):
                                for hex_byte5 in range(0,16):
                                    for hex_byte4 in range(0,16):
                                        for hex_byte3 in range(0,16):
                                            for hex_byte2 in range(0,16):
                                                for hex_byte1 in range(0,16):
                                                    total_mac +=1;
                                                    if total_mac > number_of_mac_to_print:
                                                       return
                                                    mac_list.append("%X%X:%X%X:%X%X:%X%X:%X%X:%X%X" %(hex_byte_12,hex_byte11,hex_byte10,hex_byte9,hex_byte8,hex_byte7,hex_byte6,hex_byte5,hex_byte4,hex_byte3,hex_byte2,hex_byte1))

mac_list=list()
number_of_mac_to_print = 100000000
print(datetime.datetime.utcnow())
mac_gen()
print(datetime.datetime.utcnow())
print(len(mac_list))
Run Code Online (Sandbox Code Playgroud)

输出:

2018-03-09 07:15:41.650460 <---调用mac_gen方法之前的时间戳

2018-03-09 07:22:33.902744 <---调用mac_gen方法后的时间戳

100000000.<----总条目.1亿

所以问题是:

  1. 如何在python中将运行时间从7分钟缩短到最低?

  2. 如果同样的问题,我在C或C +加上解决请给我一个基本的解决方案呢?

  3. 当为10亿mac运行相同的代码时,它会自动终止,我相信.并花更多的时间.如何实现10亿代mac?

提前致谢

squ*_*age 5

您正在经历的长时间运行很可能是因为内存被分页到您的硬盘驱动器,以便为添加新项目腾出空间mac_list.

我想不出有什么理由需要将所有这些MAC存储在内存中.它们是连续编号的,因此您可以轻松地生成它们:

gen_mac = lambda n: ":".join([("%012X" % n)[i:i+2] for i in range(0,12,2)])
Run Code Online (Sandbox Code Playgroud)

然后,而不是从中获取项目mac_list,只需使用此功能.换句话说,替换

m = mac_list[12345678]
Run Code Online (Sandbox Code Playgroud)

m = gen_mac(12345678)
Run Code Online (Sandbox Code Playgroud)

  • 也许我误解了你,但是如果`00:00:00:00:00:01`的索引是1并且索引'00:00:00:00:00:FF`是255,那么你呢need是一个将MAC转换为整数的函数,我已经给你了(`mac_2_int = lambda m:int(m.replace(":",""),16)`). (2认同)