Python知识

Reads: 1192 Edit

赋予执行脚本的权限

import os
import json
import stat

# 赋予权限
try:
	cmd = os.path.join(command_dir_info, script["script_path"])
	os.chmod(cmd, os.stat(cmd).st_mode | stat.S_IXUSR)
except Exception as e:
	logger.error(f"[{log_prefix}] chmod run error {e}")

查看CPU核数

from multiprocessing import cpu_count
import os

print("CPU的核数为:{}".format(cpu_count()))
print(type(cpu_count()))
print(os.cpu_count())
    

查看进程使用的线程数量

1、找到目标进程

可以使用ps -ef命令,通过grep关键字来找到目标进程

比如我想查看一个监控(prometheus)的进程,结果如下所示:

ps7

红框内即为监控的进程号

2、方法1:pstree命令

pstree -p 进程ID

或者

top -H

Python中yield的作用与for循环的区别

yield是python的关键字,在本例子的for循环中,对于每轮循环,yield相当于一次return(其实是返回了一个生成器),循环每次执行到yield语句的位置时,返回yield后面的值,同时会记住本次循环进行到哪里(比如本例中,当 i 取值取到 2 ,下次 i 会继续往后循环,不会重复再取 1 ),下次进入循环时,会从yield的位置继续执行,直到循环条件不满足,结束。

下面结合这个例子进行说明:

1111654128

运行这个py文件时,从上而下,先是两个函数的定义,然后从for循环开始是可执行的代码。

对 m 变量进行循环,m 的取值是通过yield_test()方法的返回值提供的,为了得到 m 的第一个值,看yield_test(5)的返回值是什么,此时程序执行到第一个方法,n=5,i 取值是range(5),也就是0,1,2,3,4,第一次循环,i 取值0,遇到yield语句,函数返回值是call(0) ,也就是0,此时,yield后面的语句不再执行,而是停在这里,等待下次进入循环时,再从这里开始。

这时0是 m 的第一个取值,开始执行最底下的for循环,打印“---------”和 m=0 ,第一次循环结束。

此时 m 该取第二个值了,再次进入上面yield_test()方法,从yield后面的语句开始执行,打印 i=0(上次循环结束时,i = 0),然后 i 继续取值 1 ,yield语句处call(1),等于2,此时yield_test(5)的返回值是2,也就是 m 的第二个取值。

同第一次一样,yield_test()里面的for循环停在了yield语句处,等待下次进入循环,从yield后面继续执行。m 获得第二个取值2后,执行循环体,打印“----------”和m=2,然后 m 去寻找下一个取值,再次进入上面的循环,从yield后面的语句开始执行。。。。。以此类推,直到最后一次。

最后一次i=4,yield语句处,call(4),等于8,也就是 m 取值为8,打印“--------”和m=8,之后,m再去寻找新值时,进入循环,从yield后面的print开始,打印 i=4,此时循环结束了,因为 i 已取到最后,然后执行yield_test(5)中,循环体外的打印语句print("do something.")和print("end.")。

至此,程序执行完毕。

异常DeprecationWarning: There is no current event loop解决方法

if __name__ == "__main__":
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(main())

资料参考

https://www.cnblogs.com/ellisonzhang/p/10273843.html



Comments

Make a comment

www.ultrapower.com ,王硕的博客,专注于研究互联网产品和技术,提供中文精品教程。 本网站与其它任何公司及/或商标无任何形式关联或合作。