赋予执行脚本的权限
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)的进程,结果如下所示:
红框内即为监控的进程号
2、方法1:pstree命令
pstree -p 进程ID
或者
top -H
Python中yield的作用与for循环的区别
yield是python的关键字,在本例子的for循环中,对于每轮循环,yield相当于一次return(其实是返回了一个生成器),循环每次执行到yield语句的位置时,返回yield后面的值,同时会记住本次循环进行到哪里(比如本例中,当 i 取值取到 2 ,下次 i 会继续往后循环,不会重复再取 1 ),下次进入循环时,会从yield的位置继续执行,直到循环条件不满足,结束。
下面结合这个例子进行说明:
运行这个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