我正在使用multiprocessing生成task的各个进程。如果task花费的时间超过5秒,我希望进程被终止。在中,它声明如下
联接(超时)
如果可选的参数超时为None (默认值),则该方法将阻塞,直到调用join()方法的进程终止为止。如果超时值是正数,它最多在超时秒内阻塞.
但是,在使用下面的代码进行测试时,我注意到在设置5秒之后,进程不会被终止。
import time
import multiprocessing as mp
from random import randint, seed
import os
def task(i):
x = randint(0
我有三个函数f1(x)、f2(x)和f3(x)返回一个结果(想象一下API调用,没有对函数的控制)。当调用这些函数时(但通常在1s以下),这些函数可能需要一段不确定的时间结束。现在,我需要调用所有这些函数并选择最佳结果,但是在约束条件下,我需要在最大t毫秒内返回一些结果。伪码:
def select_result(x, max_t):
r1 = f1(x) # but stop if it takes longer than max_t miliseconds
r2 = f2(x) # but stop if it takes longer than max_t milisec
我的程序中有一个bug,我想使用调试来检查它。在我的IDE (WingIDE)中,我有一个调试功能。但是我不能用shell调用程序。所以我使用Python模块pdb。我的应用程序是单线程的。
我研究过,但这对我来说似乎不一样。
我把它限制在下面的代码中。
我所做的:
我创建了一个简短的方法,只有在不使用IDE时才会调用它。
def set_pdb_trace():
run_in_ide = not sys.stdin.isatty()
if not run_in_ide:
import pdb; pdb.set_trace() # use only in pyt
在这段代码中,我接收了一些命令,将它们转换为数组,并在进程中执行它们。
我的问题是,我如何才能使一个进程需要超过exec_timeout秒才能终止?
有什么帮助吗?
void exec_Task(int exec_timeout, char *args, int n){
signal(SIGALRM, handler);
int i=0;
int j=0;
int len;
int pa;
int flag;
pid_t p;
int fd[2];
const char s[2] = "|"; //sets the delimiter for the token
char *
假设我有一个监督员树,其中有一个父级和一些子级。孩子们是短暂的。但被其他进程使用。家长负责将用户指向正确的孩子。
User ---lookup(child)--> Parent
User <----PidOfChild----- Parent
User --request(Resouce)--> Child
User <------respond------ Child
假设孩子在两个序列之间关闭,为了避免用户端崩溃,关闭孩子的正确方法是什么?
用户可以监控孩子,但这真的会有帮助吗?因为用户是在一个事务中完成所有这些的?
我不明白我什么时候需要杀死子进程。
for package in server.packages:
n = subprocess.Popen(['which', package], stdout=subprocess.DEVNULL)
n.wait()
if n.returncode != 0:
n.kill()
<some other code>
我得到了错误(使用Python3):
ProcessLookupError: [Errno 3] No such process
有人能解释我什么时候子进程自杀,什
我浏览了一遍,并阅读了一些关于命令在一段时间后停止运行的其他问题,但我尝试过的一切都不起作用。
这个命令的作用就像它想要在指定的时间之后停止一样(它返回终端提示符,时间很短),但是只会继续运行,并且不会停止。
这是我的代码:
#!/usr/bin/perl
use strict;
use warnings;
use Try::Tiny;
try {
local $SIG{ALRM} = sub { die "alarm\n" };
alarm 5;
system("ping 192.168.1.1");
假设这是我的工人:
class FooWorker
@queue = :foo
def self.perform
User.all.each do |u|
...
Do Long Operations (Unsafe to kill)
...
# Here it's safe to break the worker and restart
end
end
end
我正在用Resque Scheduler查询,这是我的Bluepill配置文件:
...
app.process(process_name) do