我需要限制我使用subprocess.call从python进程生成的外部命令行应用程序所花费的时间和cpu的数量,主要是因为有时候生成的进程被卡住并将cpu的引脚设置为99%.
nice和ulimit似乎是合理的方法,但我不确定他们如何与子进程交互.
有没有办法将nice和ulimit应用于subprocess.call生成的进程?是否有更好的python-native替代品?
这是在linux(ubuntu)系统上.
我正在寻找一种通过命令行修改进程优先级的方法.我找到了builtin(bash)nice
和命令renice
,它允许修改进程的优点,但不是内核计算的实际优先级.
是否有允许设置优先级的命令?(或者我在好感和优先级之间感到困惑?)
我编写了一个脚本,它使用两个线程池,每个线程池包含10个线程,用于从API中提取数据.线程池在ActiveState上实现此代码.每个线程池都通过PubSub监视Redis数据库以获取新条目.当一个新的条目将被发布,蟒蛇将数据传递到使用Python的功能Subprocess.POpen执行PHP壳里做调用API的实际工作.
这个启动PHP shell的系统对于我的PHP Web应用程序的功能是必需的,因此无法避免使用Python启动PHP shell.
此脚本仅在Linux服务器上运行.
如何控制应用程序线程的niceness(调度优先级)?
编辑:
似乎无法控制Python中各个线程的调度优先级.有一个python解决方案,或者至少是一个UNIX命令,我可以与我的脚本一起运行,以控制优先级?
编辑2:
好吧,我最终没有找到一种python方式来处理它.我现在正好运行我的脚本,就像这样:
nice -n 19 python MyScript.py
Run Code Online (Sandbox Code Playgroud) 所以我有一个脚本,我想以root身份运行,没有挂断和很好.我应该将命令放在什么顺序?
sudo nohup很好foo.bash&
要么
nohup很好sudo foo.bash&
等等
我怀疑这无关紧要,但希望得到一些真正了解的人的见解.
nice
说"nice()" 的手册页将inc添加到调用进程的nice值.那么,我们可以使用它来更改由创建的线程的nice值pthread_create
吗?
编辑:我们似乎可以为每个线程设置好的值.
我写了一个应用程序,为不同的线程设置了不同的好的值,并观察到"更好"的线程已被安排在较低的优先级.检查输出,我发现字符串"高优先级................"更频繁地输出.
void * thread_function1(void *arg)
{
pid_t tid = syscall(SYS_gettid);
int ret = setpriority(PRIO_PROCESS, tid, -10);
printf("tid of high priority thread %d , %d\n",tid ,getpriority(PRIO_PROCESS,tid));
while(1){
printf("high priority ................\n");
}
}
void * thread_function(void *arg)
{
pid_t tid = syscall(SYS_gettid);
int ret = setpriority(PRIO_PROCESS, tid, 10);
printf("tid of low priority thread %d , %d \n",tid ,getpriority(PRIO_PROCESS,tid));
while(1)
{
printf("lower priority\n");
}
}
int main()
{
pthread_t id1;
pthread_t id2;
pid_t pid = …
Run Code Online (Sandbox Code Playgroud) 当我的长时间运行的程序启动时,我想降低其优先级,以便它不会消耗它运行的机器上可用的所有资源.情况使得程序必须限制自己.
是否有一个很好的python命令,我可以使用,以便程序不利用它运行的计算机的全部容量?
我知道如果我对shell脚本很好(即:在运行之前),所有从shell脚本开始的进程也将被清除.
如果我启动一个shell脚本并重命令它,那么所有子进程是否也会被重命名?
查看了renice手册页,并没有提到子进程.
我知道os.nice()
它对于父进程来说是完美的,但是我需要对子进程进行处理.我找到了这样做的方法,但似乎不是很方便和过分:
os.system("renice -n %d %d" % ( new_nice, suprocess.pid ) )
Run Code Online (Sandbox Code Playgroud)
并且它在返回后不会返回得到很好的水平.
在python中有更简洁的方法来管理子进程吗?
我想在浏览器窗口中运行一些计算,但我不希望它减慢客户端计算机的速度以进行用户交互,特别是对于单核计算机.有没有办法调整执行JavaScript的优秀级别,以便尽可能快地执行,而不会降低机器的响应能力?
要改变hardlimit for nice,我可以修改/etc/security/limits.conf
user - nice -11
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能为ionice做同样的事情
ionice -c 1 -p 31828
Run Code Online (Sandbox Code Playgroud)
我收到了错误
ionice: ioprio_set failed: Operation not permitted
Run Code Online (Sandbox Code Playgroud) nice ×10
python ×4
renice ×3
linux ×2
scheduling ×2
unix ×2
bash ×1
javascript ×1
linux-kernel ×1
nohup ×1
pthreads ×1
resources ×1
scheduler ×1
shell ×1
subprocess ×1
sudo ×1
threadpool ×1
ulimit ×1