python编程(你的电脑能够执行多少线程和进程)

来源:互联网 发布:淘宝宝贝评论保留多久 编辑:程序博客网 时间:2024/05/22 07:01

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


    对python比较熟悉的同学,相信都写过多线程和多进程的代码。可是,不知道大家有没有这么一个想法,你的电脑究竟能执行多少线程、多少进程呢?一般来说,每个人的电脑运行的进程不算多,如果大家用的是ubuntu电脑或者mac电脑,可以通过这个命令来查看,


ubuntu> ps aux | wc -l


    从我手上的mac电脑看,也就只有190个process左右,那如果我们编写多线程代码呢?看看跑到多少的时候,cpu会卡?下面是多线程代码,

#!/usr/bin/pythonimport osimport sysimport reimport threadingimport signalimport timeg_exit = 0num  = 0def sig_process(sig, frame):global g_exitg_exit = 1def sub_process(data):while not g_exit:time.sleep(1)print datadef process():num = int(sys.argv[1])all_thread = []for i in range(num):try:td = threading.Thread(target = sub_process, args=(i,))td.start()except:all_thread.append(-1)continueall_thread.append(td)while not g_exit:time.sleep(100)for i in range(num):if isinstance(all_thread[i], int):continueall_thread[i].join()def main():if len(sys.argv) != 2:print 'wrong number parameter'return 0signal.signal(signal.SIGINT, sig_process)process()if __name__ == '__main__':main()

    除此之外,我们再补充一段多进程代码,

#!/usr/bin/pythonimport osimport sysimport reimport threadingimport signalimport timeg_exit = 0num  = 0def sig_process(sig, frame):global g_exitg_exit = 1def sub_process(data):while not g_exit:time.sleep(1)print datadef process():num = int(sys.argv[1])all_process = []for i in range(num):try:pid = os.fork()except:pid = -1if pid < 0:print 'error in fork'all_process.append(-1)elif 0 == pid:sub_process(i)os._exit(0)else:all_process.append(pid)while not g_exit:time.sleep(100)for i in range(num):if -1 == all_process[i]:continueos.waitpid(all_process[i], 0)def main():if len(sys.argv) != 2:print 'wrong number parameter'return 0signal.signal(signal.SIGINT, sig_process)process()if __name__ == '__main__':main()

    这两个文件中,线程或者进程的数目都是可以配置的。不知道怎么回事,目前我手上这台pro电脑,在3000个线程或者进程的时候,就有点卡了,cpu loading也开始高了。因为子线程或者子进程其实执行的代码很简单,不清楚为什么还是出现这种情况。