我一直在寻找一个好的超时脚本,它可以杀死一个线程,如果它已经活动了超过X秒,但我看到的所有例子都有缺陷,并不总是停止线程.使用thread.join(x)最终会破坏它作为一个线程的目的.
我发现的唯一体面的例子就是在函数调用上超时,并且不是没有它的缺陷.
有人知道更好的方法吗?
我想知道你是否可以帮我解决我遇到的一个错误.我有一个我创建的HTTP管理器,可以帮助我处理来自网站的POSTing/GETing数据.直到最近,当我尝试使用两者的混合物时,它一直工作正常.第一个循环循环一切正常,在第二个循环上它挂起在HttpWebRequest.GetRequestStream()上.我已经在网上阅读并找不到真正的解决方案.以下是获取/接收的代码块:
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] buffer = encoding.GetBytes(_PostData);
_HttpWebRequest = (HttpWebRequest)WebRequest.Create(_FetchUrl);
_HttpWebRequest.Credentials = _Credentials;
_HttpWebRequest.Method = _RequestType.ToString();
_HttpWebRequest.ContentType = "application/x-www-form-urlencoded";
_HttpWebRequest.ContentLength = buffer.Length;
_HttpWebRequest.UserAgent = userAgent;
_HttpWebRequest.CookieContainer = _CookieContainer;
_HttpWebRequest.KeepAlive = false;
_HttpWebRequest.AllowAutoRedirect = _AllowAutoRedirect;
_HttpWebRequest.AutomaticDecompression = DecompressionMethods.GZip;
_HttpWebRequest.ServicePoint.Expect100Continue = false;
if (_RequestType.Equals(RequestTypes.POST))
{
// Write POST
Stream reqStream = _HttpWebRequest.GetRequestStream();
{
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Flush();
reqStream.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
和响应:
HttpWebResponse httpWebResponse = (HttpWebResponse)_HttpWebRequest.GetResponse();
{
Stream responseStream = httpWebResponse.GetResponseStream();
{
if (_UseGzip)
{
if (httpWebResponse.ContentEncoding.ToLower().Contains("gzip"))
{
responseStream = …Run Code Online (Sandbox Code Playgroud) 我有一个运行了大量数据库查询的PHP站点.使用某些参数组合,这些查询可能会长时间运行,从而触发丑陋的超时消息.我想用一个很好的超时消息替换它,根据我的网站风格的其余部分主题.
预见到这类问题的常见答案:
"优化您的查询,以便它们不会运行这么长时间" - 我正在记录长时间运行的查询并对其进行优化,但我只是在用户受到影响后才知道这些查询.
"增加PHP超时设置(例如set_time_limit,max_execution_time),以便长时间运行的查询可以完成" - 有时查询可以运行几分钟.我想告诉用户之前有问题(例如30秒后).
"使用register_tick_function来监视脚本运行的时间" - 这只在我的脚本中的代码行之间执行.当脚本等待数据库的响应时,不会调用tick函数.
如果它有帮助,该站点使用Drupal(具有大量自定义)构建,并且在PHP 5.2上使用MySQL 5在虚拟专用Linux服务器上运行.
我知道ie和firefox都有javascript执行限制(Source 1,Source 2).根据执行的语句数量,我听说它在IE中的某个地方有500万,基于firefox中的秒数:默认情况下我的版本是10秒.
我没有得到的是案例将超过这些限制:
我确信一个巨大的循环将超过执行时间的限制
但是一个事件处理者会超过限制,如果它本身的执行时间低于限制但是如果它发生多次?
例:
假设我的页面上有一个计时器,每20秒执行一次javascript.计时器处理程序的执行时间为1秒.firefox和ie分别处理定时器函数的每个调用,所以它永远不会超过限制,或者是firefox /即加起来每个调用的时间所以在处理程序完成后,所以在我的网站上200秒后(与定时器调用10次)即使定时器处理程序本身只有1秒长,也会发生错误?
我想执行一个进程,以秒为单位将执行时间限制为一些超时并获取进程产生的输出.我想在windows,linux和freebsd上做这个.
我试过以三种不同的方式实现它:
cmd - 没有超时和subprocess.PIPE用于输出捕获.
行为:按预期运行但不支持超时,我需要超时...
cmd_to - 使用timeout和subprocess.PIPE进行输出捕获.
BEHAVIOR:当输出> = 2 ^ 16字节时阻止子进程执行.
cmd_totf - 使用timeout和tempfile.NamedTemporaryfile进行输出捕获.
行为:按预期运行,但在磁盘上使用临时文件.
这些可在下面获得进一步检查.
从下面的输出中可以看出,当使用子处理时,超时代码会阻止子进程的执行.PIPE和子进程的输出是> = 2 ^ 16字节.
子进程文档说明在调用process.wait()和使用subprocessing.PIPE时这是预期的,但是在使用process.poll()时没有给出警告,那么这里出了什么问题?
我在cmd_totf中有一个使用tempfile模块的解决方案,但权衡是它将输出写入磁盘,这是我真正想要避免的.
所以我的问题是:
用于生成一堆输出的脚本('exp_gen.py'):
#!/usr/bin/env python
import sys
output = "b"*int(sys.argv[1])
print output
Run Code Online (Sandbox Code Playgroud)
子处理周围包装器的三种不同实现(cmd,cmd_to,cmd_totf).Popen:
#!/usr/bin/env python
import subprocess, time, tempfile
bufsize = -1
def cmd(cmdline, timeout=60):
"""
Execute cmdline.
Uses subprocessing and subprocess.PIPE.
"""
p = subprocess.Popen(
cmdline,
bufsize = bufsize,
shell = False,
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE
) …Run Code Online (Sandbox Code Playgroud) 我使用javascript包含从另一台服务器上的php文件提供的一些内容.但是,这种其他服务有时会变得不稳定,要么需要很长时间才能加载,要么根本不加载.
在失败和停止包含js之前,JS是否有办法尝试获取外部数据x秒.
我一直在寻找解决方案,但无济于事.我有一个按钮,我点击,有时需要很长一段时间才能返回数据,并且驱动程序正在超时,只是杀了应用程序我猜.
我试图使用WebDriverWait类来完成此任务,但Click()方法不能用于我使用它的方式.
WebDriverWait wait = new WebDriverWait(browser, new TimeSpan(0, 5, 0));
bool clicked = wait.Until<bool>((elem) =>
{
elem.Click(); //Doesn't Work
return true;
});
Run Code Online (Sandbox Code Playgroud)
ImplicitlyWait()方法仅用于等待加载元素,但这会在Click()上超时,因此它甚至无法查找元素.
SetScriptTimeout()方法只适用于执行javascript,我没有这样做.
有谁知道这样做的方法?
我知道它的另一个Heroku错误H12(请求超时)问题.似乎问题是由许多不同的原因引起的.几天前我在heroku上部署了一个Rails 3.2.2应用程序.当我尝试通过浏览器访问我的应用程序时.我有
Application Error
An error occurred in the application and your page could not be served. Please try again in a few moments.
If you are the application owner, check your logs for details.
Run Code Online (Sandbox Code Playgroud)
所以我开始像往常一样在互联网上搜索,看出是什么问题.然后我学会使用heroku日志来检查我的日志文件.这是日志文件.
2012-06-11T03:16:51+00:00 heroku[web.1]: Unidling
2012-06-11T03:16:51+00:00 heroku[web.1]: State changed from down to created
2012-06-11T03:16:51+00:00 heroku[web.1]: State changed from created to starting
2012-06-11T03:16:56+00:00 heroku[web.1]: Starting process with command `bundle exec rails server -p 43527`
2012-06-11T03:17:09+00:00 app[web.1]: DEPRECATION WARNING: You have Rails 2.3-style plugins …Run Code Online (Sandbox Code Playgroud) 我有以下功能:
function mark_unmark_user_answer(targ, answer, answer_id, test_id, test_type, question_no, module_url) {
if(checked==targ){
targ.checked=false;
checked=false;
} else {
checked=targ;
}
$.post(module_url, {'test_id':test_id, 'question_no':question_no, 'op':'mark_ans', 'test_type':test_type, 'answer_no':answer, 'answer_id':answer_id}, function(data) {
if(jQuery.trim(data)=='unmark_ans') {
$('input[type="radio"]').removeAttr('checked');
$('#display_'+question_no).removeClass('green');
$('#display_'+question_no).removeClass('blue');
$('#display_'+question_no).addClass('orange');
} else {
//$('#mark_review').val('Mark');
$('#display_'+question_no).removeClass('orange');
$('#display_'+question_no).removeClass('blue');
$('#display_'+question_no).addClass("green");
$('#mark_review').attr('disabled', false);
}
var total_questions = $('#total_questions').val();
test_question_attempted_count( total_questions );
});
}
Run Code Online (Sandbox Code Playgroud)
我想为这个功能分配30秒的超时时间.因此,如果在30秒内未收到对ajax请求的响应,则应显示警告消息"您的Internet连接有问题".否则正常功能应该执行.
任何人都可以帮忙吗?
提前致谢.
我试图让 Gitlab 与 SSH 一起工作,但它不会。
我已经完成了以下步骤:
1) 生成 ssh 密钥
ssh-keygen -t rsa -C "myemail@myhoster.com" -b 4096
Run Code Online (Sandbox Code Playgroud)
2 ) 在文件夹 /Users/myUserName/.ssh/ 中将密钥命名为“id_rsa”
3)通过复制密钥
pbcopy < ~/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)
4)将密钥插入gitlab
当我现在尝试克隆存储库时,我收到以下错误:
$ git clone git@gitlab.com:myName/repositoryName/ repoName
Cloning into 'repoName'...
ssh: connect to host gitlab.com port 22: Operation timed out
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)
出了什么问题?
timeout ×10
ajax ×2
c# ×2
javascript ×2
python ×2
deployment ×1
drupal ×1
gitlab ×1
hang ×1
heroku ×1
httprequest ×1
jquery ×1
mysql ×1
php ×1
repository ×1
selenium ×1
ssh ×1
subprocess ×1
webdriver ×1