我正在尝试编写我的第一个Ruby程序,但是有问题.该代码必须通过HTTP下载32个MP3文件.它实际上下载了一些,然后是超时.
我尝试设置超时时间,但没有区别.在Windows下运行代码,Cygwin和Mac OS X具有相同的结果.
这是代码:
require 'rubygems'
require 'open-uri'
require 'nokogiri'
require 'set'
require 'net/http'
require 'uri'
puts "\n Up and running!\n\n"
links_set = {}
pages = ['http://www.vimeo.com/siai/videos/sort:oldest',
'http://www.vimeo.com/siai/videos/page:2/sort:oldest',
'http://www.vimeo.com/siai/videos/page:3/sort:oldest']
pages.each do |page|
doc = Nokogiri::HTML(open(page))
doc.search('//*[@href]').each do |m|
video_id = m[:href]
if video_id.match(/^\/(\d+)$/i)
links_set[video_id[/\d+/]] = m.children[0].to_s.split(" at ")[0].split(" -- ")[0]
end
end
end
links = links_set.to_a
p links
cookie = ''
file_name = ''
open("http://www.tubeminator.com") {|f|
cookie = f.meta['set-cookie'].split(';')[0]
}
links.each do |link|
open("http://www.tubeminator.com/ajax.php?function=downloadvideo&url=http%3A%2F%2Fwww.vimeo.com%2F" + link[0],
"Cookie" => cookie) …Run Code Online (Sandbox Code Playgroud) 题
当我运行所有JUnit测试时,使用eclipse,我可以设置默认超时吗?
背景
我的经理坚持编写单元测试,有时需要5分钟才能完成.当我尝试运行我们的整个测试套件(仅约300次测试)时,可能需要30多分钟.我想放置一些可以阻止任何超过10秒的测试的东西.
我知道个别测试可以注释:
@Test(timeout=10000)
Run Code Online (Sandbox Code Playgroud)
但这样做会使他的长期测试总是失败.我希望他们在他的盒子上运行时工作(如果我必须在检查之前对项目进行微调,那是可以接受的.但是,从40个不同的测试文件中删除超时是不切实际的).
我也知道我可以创建一个ant任务来为所有测试设置默认超时,类似于:
<junit timeout="10000">
...
</junit>
Run Code Online (Sandbox Code Playgroud)
问题是我们通常使用右键单击>运行方式> JUnit测试从Eclipse中运行测试.
摘要
那么是否有一种相对无痛的方法为所有测试设置超时,可能使用运行配置设置,项目设置,或JUnit首选项,或环境变量,或什么?我甚至决定安装一些其他插件,让我右键单击特定的测试文件夹,并以其他方式运行所有测试,如通过蚂蚁或其他东西......
我正在使用第三方Java库与REST API进行交互.REST API有时需要很长时间才能响应,最终导致java.net.ConnectException被抛出.
我想缩短超时时间,但无法修改第三方库.
我想在调用Java方法时应用某种形式的超时控制,以便我可以确定在什么时候放弃等待.
这与网络超时无直接关系.我希望能够尝试执行操作,并能够在指定的等待时间后放弃.
以下绝不是有效的Java,但在概念上证明了我想要实现的目标:
try {
Entity entity = new Entity();
entity.methodThatMakesUseOfRestApi();
} catch (<it's been ages now, I don't want to wait any longer>) {
throw TimeoutException();
}
Run Code Online (Sandbox Code Playgroud) 我在使用C#创建的Windows服务中尝试确定超时的原因时遇到了困难.我花了相当多的时间查看有关该问题的几个帖子和主题,但我不确定还有什么可以尝试.
有什么问题?
有时在某些运行我的Windows服务的计算机上,它在重新启动计算机后无法成功启动.我收到有关服务无法及时启动的常见EventLog消息,并且在30000毫秒后超时.Windows Server 2003计算机似乎是最常见的模式,但并不总是与此操作系统隔离.例如,它在其他W2K3机器上运行得非常好.
启动失败可能是相当随机的,因为它有时会启动,有时会失败,因此很难按需重现问题.我也使用Log4Net捕获和错误并将它们记录到RollingFileAppender.但是,当服务无法启动时,不会创建任何日志文件,也不会保存日志信息.就好像我的服务条目线程阻塞而没有被调用.
其他详情:
我在Program.cs中添加了以下代码,其中包括服务的主要入口点.我在CurrentDomain上挂钩到一个UnhandledException事件,并使用log4net记录任何未处理的错误.如果ServiceBase.Run以某种方式炸弹,我还可以记录该错误.
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new SchedulerService()
};
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
try
{
ServiceBase.Run(ServicesToRun);
}
catch (Exception ex)
{
Log.Fatal("Unhandled Service Exception", ex);
}
}
private static log4net.ILog _log = null;
static log4net.ILog Log
{
get
{
if (_log == null)
{
if (!log4net.LogManager.GetRepository().Configured)
{
log4net.Config.XmlConfigurator.Configure();
}
_log = log4net.LogManager.GetLogger(typeof(Program));
}
return _log;
}
}
static void CurrentDomain_UnhandledException(object …Run Code Online (Sandbox Code Playgroud) 我在函数内部调用外部程序.现在我想超时这个功能而不仅仅是外部程序.但是在函数超时之后,外部程序仍然在我的计算机上运行(我正在使用debian),直到它完成计算,之后它的线程仍然作为主程序的子线程保留在进程表中直到主程序终止.
这里有两个最小的例子,说明了我想做的事情.第一个使用unsafePerformIO,第二个完全在IO monad中.我并不真的依赖于unsafePerformIO,但是如果可能的话我想保留它.所描述的问题在有和没有它的情况下发生.
module Main where
import System.Timeout
import Criterion.Measurement
import System.IO.Unsafe
import System.Process
main = do
x <- time $ timeoutP (1 * 1000000) $ mytest 2
y <- getLine
putStrLn $ show x ++ y
timeoutP :: Int -> a -> IO (Maybe a)
timeoutP t fun = timeout t $ return $! fun
mytest :: Int -> String
mytest n =
let
x = runOnExternalProgram $ n * 1000
in
x ++ ". Indeed."
runOnExternalProgram :: …Run Code Online (Sandbox Code Playgroud) 我在ICS上测试我的应用程序时遇到了一个奇怪的问题.
在Android 2.X上使用以下代码效果很好(有时会发生超时但很少次):
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParameters, SOCKET_TIMEOUT);
final DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
// Create a new HttpClient and Post Header
HttpPost httpPost = new HttpPost(url);
HttpResponse response = null;
try {
if (keys != null) {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
}
// Cookies
// Create a local instance of cookie store
if (checkCookieValues()) {
BasicClientCookie cookieSession = new BasicClientCookie(mCookieName, mCookieValue);
cookieSession.setDomain(mCookieDomain);
httpClient.getCookieStore().clear();
httpClient.getCookieStore().addCookie(cookieSession);
}
// Execute HTTP Post Request
response = httpClient.execute(httpPost);
httpClient.getConnectionManager().shutdown();
} catch …Run Code Online (Sandbox Code Playgroud) 在Android 2.1/2.2上我使用DefaultHttpClientAndroid SDK中找到的.
Apache在他们的文档中说有两个超时:
CoreConnectionPNames.SO_TIMEOUT ='http.socket.timeout':定义套接字超时(SO_TIMEOUT),以毫秒为单位,即等待数据的超时,换句话说,两个连续数据包之间的最大周期不活动.超时值为零被解释为无限超时.此参数需要java.lang.Integer类型的值.如果未设置此参数,则读取操作不会超时(无限超时).
CoreConnectionPNames.CONNECTION_TIMEOUT ='http.connection.timeout':确定建立连接之前的超时(以毫秒为单位).超时值为零被解释为无限超时.此参数需要java.lang.Integer类型的值.如果未设置此参数,则连接操作不会超时(无限超时).
我尝试在Android源中搜索这两个超时的默认值,但无法找到.有谁知道这些超时的默认值是什么?我想获得一个链接到值设置的源或关于此的官方文档(而不仅仅是听取意见).
我是Haskell的新手,我正在试图弄清楚如何安排回调从现在开始X秒(并且不久).
在搜索Hoogle和Google时,我发现:
http://www.haskell.org/ghc/docs/latest/html/libraries/base/GHC-Event.html
以及:
http://hackage.haskell.org/packages/archive/base/4.3.1.0/doc/html/System-Event.html
这两个功能都具有"registerTimeout"功能,似乎可以满足我的需求.但是,System.Event似乎不再出现在Haskell和GHC的最新版本中.Event被标记为内部版本.
我可以使用一些用户空间替代品吗?我不想使用用于GLUT的计时功能(除非这是实现我的目标的规定方式),并且System.Timeout似乎不是我想要的; 它旨在最大限度地利用可以采取的时间而不是最小的时间.
谢谢您的意见!
我需要HttpClient.Timeout在提出请求后更改属性.当我尝试时,我得到一个例外:
此实例已启动一个或多个请求.只能在发送第一个请求之前修改属性.
有什么方法可以避免这种情况吗?