我正在开发一个Java项目,我需要异步运行多个任务.我被引导相信Executor是我做这件事的最佳方式,所以我很熟悉它.(可以获得报酬!)然而,我不清楚最好的方法是完成我想要做的事情.
为了争论,让我说我有两个任务在运行.预计两者都不会终止,并且两者都应该在应用程序的生命周期内运行.我正在尝试编写一个主包装类,以便:
现在,应该注意的是,两个任务的实现都会将代码包装run()在一个永远不会运行完成的无限循环中,并且try/catch块应该处理所有运行时异常而不会中断循环.我正试图增加另一层确定性; 如果我或跟随我的人做了一些愚蠢的事情来挫败这些保护措施并停止任务,那么应用程序需要做出适当的反应.
是否有最佳实践来解决这个问题,那些比我更有经验的人会推荐?
FWIW,我已经掀起了这个测试类:
public class ExecTest {
private static ExecutorService executor = null;
private static Future results1 = null;
private static Future results2 = null;
public static void main(String[] args) {
executor = Executors.newFixedThreadPool(2);
while(true) {
try {
checkTasks();
Thread.sleep(1000);
}
catch (Exception e) {
System.err.println("Caught exception: " + e.getMessage());
}
}
}
private static void checkTasks() throws Exception{
if (results1 == null || results1.isDone() || results1.isCancelled()) {
results1 = executor.submit(new Test1());
} …Run Code Online (Sandbox Code Playgroud) 我们什么时候使用synchronized ArrayList?我们已经有了Vector同步.
你能分享一下你一起使用Scala和Wicket的经历吗?它们是否适合彼此?你是否利用Scala(和FP)与Wicket相比使用Java?你为什么喜欢Wicket而不是Lift?
这是SQL表:
KEY | NAME | VALUE
---------------------
13b | Jeffrey | 23.5
F48 | Jonas | 18.2
2G8 | Debby | 21.1
Run Code Online (Sandbox Code Playgroud)
现在,如果我输入:
SELECT *
FROM table
WHERE VALUE = 23.5
Run Code Online (Sandbox Code Playgroud)
我会得到第一排.
我需要完成的是获得下面的第一行和下两行.有办法吗?
列没有排序,WHERE条件不参与行的选择,第一个除外.我只需要在返回的行之下添加两行 - 在SELECT查询返回的行之后输入的行.
我需要循环一个const char,我使用了一个简单的字符串循环示例:
const char *str;
for(int i = 0; i < 10; ++i)
{
str += " ";
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译时,我得到了这个:
ubuntu @eeepc:〜/ Test_C_OS $ gcc -o kernel.o -c kernel.c -Wall -Wextra -nostdlib -nostartfiles -nodefaultlibs
kernel.c:26:error:'for'循环初始声明在C99模式
kernel.c 之外使用:28:错误:无效的操作数到二进制+
ubuntu @ eeepc:〜/ Test_C_OS $
我该怎么办?
我一直在使用lxml来创建rss feed的xml.但是我在使用标签时遇到了麻烦,并且无法真正弄清楚如何添加动态数量的元素.鉴于lxml似乎只是将函数作为函数的参数,我似乎无法弄清楚如何循环动态数量的项目而不重建整个页面.
rss = page = (
E.rss(
E.channel(
E.title("Page Title"),
E.link(""),
E.description(""),
E.item(
E.title("Hello!!!!!!!!!!!!!!!!!!!!! "),
E.link("htt://"),
E.description("this is a"),
),
)
)
)
Run Code Online (Sandbox Code Playgroud) 我的第一个问题.
已删除subversion存储库,但存在从该存储库进行的检出.我如何从结账处重建存储库?
我有一个asp.net nTier应用程序.数据访问层是一个强类型的DataSet,由多个DataTable和DataAdapter组成.当用户登录时,他们选择要连接的数据库(来自成员资格数据库中的表).我需要将选定的连接字符串传递给DataSet对象,该对象对于这些用户保持不变,直到他们再次登录.
我想答案可能是创建一个DataSet对象的部分类,我可以将连接字符串传递给构造函数.我不知道怎么回事.
干杯
我目前正在尝试使用Python asyncore和pyqt4学习网络.
我编写了一个小型服务器,它基本上监听某个端口,并将收到的所有消息重新发送给发送方.
由于这两种QTS QApplication.exec_()和asyncore.loop()是永不回我不能都在一个线程启动它们的功能,所以我盯着asyncore.loop()在一个单独的守护线程.
每当我的服务器类(派生自asyncore.dispatcher)建立或删除连接,或发送/接收消息时,它都会调用我的窗口类(派生自QtGui.QMainWindow)的方法,这些方法在a中显示信息QPlainTextEdit.
但除非您使用鼠标标记文本,否则文本不可见.
Python控制台显示以下错误消息:
QObject::connect: Cannot queue arguments of type 'QTextBlock'
(Make sure 'QTextBlock' is registered using qRegisterMetaType().)
QObject::connect: Cannot queue arguments of type 'QTextCursor'
(Make sure 'QTextCursor' is registered using qRegisterMetaType().)
Run Code Online (Sandbox Code Playgroud)
我在一些论坛上看到,这可能是由于从另一个线程调用qt-functions引起的,并且使用信号和插槽而不是普通函数调用可能会解决问题,但我也试过了信号,我仍然得到这个错误.
所以,(如果这确实是我的问题的原因)有什么正确的方法从另一个线程调用qt对象的方法?
编辑更多信息: asyncore.loop()调用位于子线程中,它不是真正阻塞,但仅在asyncore.loop()的运行时期间,我的Server类(asyncore.dispatcher)可以进行网络连接.因此,在asyncore.loop()的运行时期间,我的Server类的方法由asyncore.loop()(=子线程)调用,并且在这些我试图向主线程中运行的窗口类发出信号
编辑:好像我现在正在使用它,我的代码中有一些错误,现在所有信号都按预期工作.
编辑:小例子:http://paste2.org/p/635612(死链接)
是否有更简洁,高效或简单的pythonic方式来执行以下操作?
def product(list):
p = 1
for i in list:
p *= i
return p
Run Code Online (Sandbox Code Playgroud)
编辑:
我实际上发现这比使用operator.mul要快一些:
from operator import mul
# from functools import reduce # python3 compatibility
def with_lambda(list):
reduce(lambda x, y: x * y, list)
def without_lambda(list):
reduce(mul, list)
def forloop(list):
r = 1
for x in list:
r *= x
return r
import timeit
a = range(50)
b = range(1,50)#no zero
t = timeit.Timer("with_lambda(a)", "from __main__ import with_lambda,a")
print("with lambda:", t.timeit())
t = timeit.Timer("without_lambda(a)", "from __main__ …Run Code Online (Sandbox Code Playgroud)