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

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


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


ubuntu> ps aux | wc -l


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

#!/usr/bin/python

import os
import sys
import re
import threading
import signal
import time

g_exit = 0
num  = 0

def sig_process(sig, frame):
	global g_exit
	g_exit = 1

def sub_process(data):
	while not g_exit:
		time.sleep(1)
		print data

def 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)
			continue

		all_thread.append(td)

	while not g_exit:
		time.sleep(100)

	for i in range(num):
		if isinstance(all_thread[i], int):
			continue
		all_thread[i].join()

def main():
	if len(sys.argv) != 2:
		print 'wrong number parameter'
		return 0

	signal.signal(signal.SIGINT, sig_process)
	process()


if __name__ == '__main__':
	main()

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

#!/usr/bin/python

import os
import sys
import re
import threading
import signal
import time

g_exit = 0
num  = 0

def sig_process(sig, frame):
	global g_exit
	g_exit = 1

def sub_process(data):
	while not g_exit:
		time.sleep(1)
		print data

def process():
	num = int(sys.argv[1])
	all_process = []

	for i in range(num):
		try:
			pid = os.fork()
		except:
			pid = -1

		if 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]:
			continue
		os.waitpid(all_process[i], 0)

def main():
	if len(sys.argv) != 2:
		print 'wrong number parameter'
		return 0

	signal.signal(signal.SIGINT, sig_process)
	process()

if __name__ == '__main__':
	main()

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



已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页