我不得不调用一个有时不会在给定时间内终止的库函数.有没有办法调用该函数,但如果它在n几秒钟内没有终止就中止它?
我无法修改函数,所以我不能直接将中止条件放入其中.我必须在外部为函数添加超时.
它可能是一个可能的解决方案,将其作为(提升)线程启动,然后我可以在一段时间后终止它?会有类似的东西吗?我实际上认为该函数不是线程安全的,但如果我将它作为唯一的单线程运行则无关紧要,对吧?还有其他(更好的)解决方案吗?
我想用Windows批处理文件启动一个程序.但程序应该在一定的超时值后停止.例如:运行程序60秒并在60秒后停止.
在Linux下,有一个很好的timeout命令来做我想要的.Windows也有一个timeout命令,但它只是暂停一个命令,以延迟执行.Windows下还有其他东西吗?
设置:Windows 7,64位,专业版
这是我做的:
selenium.click("link=mylink");
selenium.waitForPageToLoad(60000);
// do something, then navigate to a different page
// (window focus is never changed in-between)
selenium.click("link=mylink");
selenium.waitForPageToLoad(60000);
Run Code Online (Sandbox Code Playgroud)
链接"mylink"确实存在,click()的第一次调用始终有效.但是第二次点击()有时似乎有效,有时则不然.
看起来似乎根本没有触发click()事件,因为页面甚至没有开始加载.不幸的是,这种行为是不确定的.
这是我已经尝试过的:
设置更长的时间超时
=>没有帮助
加载一个页面后等待元素存在
=>不起作用,因为页面甚至没有开始加载
现在我最终调用了click()两次,所以:
selenium.click("link=mylink");
selenium.waitForPageToLoad(60000);
// do something, then navigate to a different page
// (window focus is never changed in-between)
selenium.click("link=mylink");
selenium.click("link=mylink");
selenium.waitForPageToLoad(60000);
Run Code Online (Sandbox Code Playgroud)
这会奏效,但这不是一个非常好的解决方案.我也在另一个论坛上看到有人建议写一些像'clickAndWaitWithRetry'的东西:
try {
super.click("link=mylink");
super.waitForPageToLoad(60000);
}
catch (SeleniumException e) {
super.click("link=mylink");
super.waitForPageToLoad(60000);
}
Run Code Online (Sandbox Code Playgroud)
但我认为这也不是一个合适的解决方案....任何想法/解释为什么click()事件有时不会被触发?
过去已经进行了许多尝试以在Python中添加超时功能,以便在指定的时间限制到期时,等待代码可以继续.不幸的是,以前的配方要么允许运行功能继续运行并消耗资源,要么使用特定于平台的线程终止方法来终止该功能.这个wiki的目的是为这个问题开发一个跨平台的答案,许多程序员不得不为各种编程项目解决这个问题.
#! /usr/bin/env python
"""Provide way to add timeout specifications to arbitrary functions.
There are many ways to add a timeout to a function, but no solution
is both cross-platform and capable of terminating the procedure. This
module use the multiprocessing module to solve both of those problems."""
################################################################################
__author__ = 'Stephen "Zero" Chappell <Noctis.Skytower@gmail.com>'
__date__ = '11 February 2010'
__version__ = '$Revision: 3 $'
################################################################################
import inspect
import sys
import time
import multiprocessing
################################################################################
def add_timeout(function, limit=60):
"""Add a …Run Code Online (Sandbox Code Playgroud) 无论如何,SoapClient请求超时并抛出异常.截至目前,我得到PHP服务器响应超时,在我的情况下60秒.基本上我想要的是,如果在一定时间内没有来自Web服务的任何回复,将抛出异常并且我可以捕获它.60秒警告不是我想要的.
我想编写一个需要时间限制(以秒为单位)和列表的函数,并在时间限制内计算尽可能多的列表元素.
我的第一次尝试是首先编写以下函数,该函数计算纯计算并返回结果的时间:
import Control.DeepSeq
import System.CPUTime
type Time = Double
timed :: (NFData a) => a -> IO (a, Time)
timed x = do t1 <- getCPUTime
r <- return $!! x
t2 <- getCPUTime
let diff = fromIntegral (t2 - t1) / 10^12
return (r, diff)
Run Code Online (Sandbox Code Playgroud)
然后,我可以根据这个定义我想要的功能:
timeLimited :: (NFData a) => Time -> [a] -> IO [a]
timeLimited remaining [] = return []
timeLimited remaining (x:xs) = if remaining < 0
then return []
else do
(y,t) <- …Run Code Online (Sandbox Code Playgroud) HttpClient有一个内置超时功能(尽管都是异步的,即超时可以被认为是与http请求功能正交,因此可以由通用异步实用程序处理,但是除此之外)当超时启动时,它会抛出一个TaskCanceledException(包含在内) a AggregateException).
TCE包含CancellationToken等于的CancellationToken.None.
现在,如果我提供HttpClient了CancellationToken我自己的一个并使用它来取消操作完成(或超时),我得到完全相同TaskCanceledException,再次使用CancellationToken.None.
通过仅查看抛出的异常,还有一种方法可以确定超时是否取消了请求,而不必让我自己CancellationToken可以访问检查异常的代码?
PS这可能是一个错误,并CancellationToken以某种方式错误地修复CancellationToken.None?在取消使用自定义CancellationToken的情况下,我希望TaskCanceledException.CancellationToken等于该自定义令牌.
编辑
为了使问题更加清晰,通过访问原始文件CancellationTokenSource,很容易区分超时和用户取消:
origCancellationTokenSource.IsCancellationRequested == true
CancellationToken从异常中获取但是给出了错误的答案:
((TaskCanceledException)e.InnerException).CancellationToken.IsCancellationRequested == false
这是一个最小的例子,由于受欢迎的需求:
public void foo()
{
makeRequest().ContinueWith(task =>
{
try
{
var result = task.Result;
// do something with the result;
}
catch (Exception e)
{
TaskCanceledException innerException = e.InnerException as TaskCanceledException;
bool …Run Code Online (Sandbox Code Playgroud) 我正在制作bash脚本供我使用.如何运行命令一段时间,比如20秒并终止命令?我尝试了很多来自互联网的解决方案,但没有任何效果,我也试过超时命令但没有成功.请给我一些解决方案.
提前致谢
更新
例如:我想在10秒后在脚本和终端中运行此命令
some command
Run Code Online (Sandbox Code Playgroud) 有一些问题让我的流浪汉,得到了框,运行vagrant init和vagrant up命令后我得到这个消息.
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'precise32'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: virtm_default_1400193131859_61200
==> default: Fixed port collision for 22 => 2222. Now on port 2201.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2201 (adapter 1) …Run Code Online (Sandbox Code Playgroud) 如何在Spring Boot应用程序中配置我的(嵌入式)Tomcat会话超时?
public class SessionListener implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent se) {
se.getSession().setMaxInactiveInterval(5*60);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
}}
Run Code Online (Sandbox Code Playgroud)
我有一个SessionListener,但我不知道在哪个类中我必须将此监听器添加到Context.
timeout ×10
.net ×1
abort ×1
asynchronous ×1
bash ×1
batch-file ×1
c# ×1
c++ ×1
command ×1
function ×1
haskell ×1
java ×1
php ×1
process ×1
python ×1
selenium ×1
session ×1
soap-client ×1
spring ×1
spring-boot ×1
time ×1
vagrant ×1
vagrantfile ×1
virtualbox ×1
web-services ×1