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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/feixiaoxing/article/details/78565542

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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也开始高了。因为子线程或者子进程其实执行的代码很简单,不清楚为什么还是出现这种情况。



展开阅读全文

没有更多推荐了,返回首页