Tag: multithreading

Pythonmultithreading等待所有线程完成

这可能是在类似的情况下提出的,但是我经过20多分钟的search才find答案,所以我会问。 我写了一个Python脚本(可以说:scriptA.py)和一个脚本(可以说scriptB.py) 在scriptB中,我想用不同的参数多次调用scriptA,每次运行需要大约一个小时,(它是一个巨大的脚本,有很多东西,不用担心),我希望能够运行scriptA同时具有所有不同的论点,但是我需要等到所有这些都完成之后再继续; 我的代码: import subprocess #setup do_setup() #run scriptA subprocess.call(scriptA + argumentsA) subprocess.call(scriptA + argumentsB) subprocess.call(scriptA + argumentsC) #finish do_finish() 我想同时运行所有的subprocess.call() ,然后等到它们全部完成后,我该怎么做? 我试图在这里使用线程: from threading import Thread import subprocess def call_script(args) subprocess.call(args) #run scriptA t1 = Thread(target=call_script, args=(scriptA + argumentsA)) t2 = Thread(target=call_script, args=(scriptA + argumentsB)) t3 = Thread(target=call_script, args=(scriptA + argumentsC)) t1.start() t2.start() […]

primefaces更新..在Postgres中select

我正在build立一个排队机制。 有一些需要处理的数据行和一个状态标志。 我正在使用update .. returning子句来pipe理它: UPDATE stuff SET computed = 'working' WHERE id = (SELECT id from STUFF WHERE computed IS NULL LIMIT 1) RETURNING * 嵌套的select部分是否与更新相同,还是在这里有竞争条件? 如果是这样,内部select是否需要select for update ?

EndInvoke()是可选的,是可选的还是绝对不可选的?

我读过关于是否每个BeginInvoke()必须由EndInvoke()匹配的冲突意见。 没有调用EndInvoke()相关的泄漏或其他问题?

如何立即终止在套接字IO操作上的线程阻塞?

在Java的上下文中,我创build了一个新的线程来读取networkinginput时,打开一个GUI窗口,当我closures窗口,我想释放套接字资源,立即终止线程。 现在我正在使用setSoTimeout方法,但我不想等待超时exception。 有人可以提出一些build议吗? 谢谢!

与HandlerThread通信的示例

我想从GUI线程设置一个HandlerThread。 然后一段时间后,当在GUI上点击一个button时,它运行callHello(),然后发送一个消息给驻留在asynchronouslogging“Hello World”的非GUI线程上的HelloLogger对象。 我已经尝试了一些东西,一些块无限期地,一些永远不会收到消息,等等等等。下面的代码是或多或less如我所知,请有人可以修改它的工作? public class HandlerThreadExample { private MyHandlerThread mMyHandlerThread; private Looper mLooper; private Handler mHandler; public HandlerThreadExample(){ mMyHandlerThread = new MyHandlerThread(); mMyHandlerThread.start(); mLooper = mMyHandlerThread.getLooper(); } public void callHello() { mHandler.sendEmptyMessage(1); } private class MyHandlerThread extends HandlerThread { private HelloLogger mHelloLogger; private Handler mHandler; public MyHandlerThread() { super("The MyHandlerThread thread", HandlerThread.NORM_PRIORITY); } public […]

如何在Java中使用单独的线程调用方法?

比方说,我有一个方法doWork() 。 我如何从一个单独的线程(而不是主线程)调用它。

如何让ThreadPoolExecutor在排队之前将线程增加到max?

我一直在使用ThreadPoolExecutor的默认行为感到沮丧, ThreadPoolExecutor支持许多人使用的ExecutorService线程池。 引用Javadocs: 如果有多于corePoolSize但小于maximumPoolSize线程正在运行,则只有在队列已满时才会创build一个新线程。 这意味着如果使用下面的代码定义一个线程池,它将永远不会启动第二个线程,因为LinkedBlockingQueue是无界的。 ExecutorService threadPool = new ThreadPoolExecutor(1 /*core*/, 50 /*max*/, 60 /*timeout*/, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()); 只有当你有一个有限的队列和队列已满时 ,核心号码以上的任何线程才会启动。 我怀疑有大量的初级Javamultithreading程序员不了解ThreadPoolExecutor的这种行为。 现在我有特定的用例,这是不是最佳的。 我正在寻找方法,而无需编写自己的TPE课程来解决这个问题。 我的要求是一个Web服务,正在回电给一个可能不可靠的第三方。 我不想与web请求同步callback,所以我想使用线程池。 我通常得到这些几分钟,所以我不想有一个newFixedThreadPool(…)与大量的线程,大多是hibernate的。 每隔一段时间,我都会碰到这种stream量,我想把线程的数量扩大到最大值(比方说50)。 我需要做一个最好的尝试来做所有的callback,所以我想排队50以上的任何额外的。我不想通过使用newCachedThreadPool()淹没我的networking服务器的其余部分。 如何解决ThreadPoolExecutor中的限制, 在更multithreading启动之前队列需要被限制和已满? 如何在排队任务之前启动更multithreading? 编辑: @Flavio关于使用ThreadPoolExecutor.allowCoreThreadTimeOut(true)使核心线程超时并退出很有用。 我认为,但我仍然需要核心线程function。 如果可能的话,我不希望池中的线程数量低于核心大小。

Grand Central Dispatch(GCD)与performSelector – 需要更好的解释

我已经在我的应用程序中使用了GCD和performSelectorOnMainThread:waitUntilDone,并且倾向于认为它们是可互换的 – 也就是说,performSelectorOnMainThread:waitUntilDone是GCD C语法的Obj-C包装器。 我一直在想这两个命令是等价的: dispatch_sync(dispatch_get_main_queue(), ^{ [self doit:YES]; }); [self performSelectorOnMainThread:@selector(doit:) withObject:YES waitUntilDone:YES]; 我错了吗? 也就是说,performSelector *指令和GCD指令是否有区别呢? 我已经阅读了很多关于它们的文档,但是还没有看到明确的答案。

线程是否有一个独特的堆?

据我所知,当线程由操作系统创build时,每个线程都得到一个独立的堆栈。 我不知道每个线程是否还有一个独特的堆栈?

我怎样才能传播线程之间的exception?

我们有一个单线程调用的函数(我们将其命名为主线程)。 在函数体内,我们产生了多个工作线程来完成CPU密集型工作,等待所有线程完成,然后在主线程上返回结果。 结果是调用者可以天真地使用这个函数,并且在内部它将使用多个核心。 迄今为止都很好.. 我们面临的问题是处理例外。 我们不希望工作线程上的exception使应用程序崩溃。 我们希望调用者的函数能够在主线程上捕获它们。 我们必须在工作线程上捕获exception,并将它们传播到主线程,让它们从这里继续展开。 我们怎么做到这一点? 我能想到的最好的是: 在我们的工作线程(std :: exception和我们自己的几个)上捕获各种exception。 loggingexception的types和消息。 在主线程上有一个相应的switch语句,它重新引发工作线程上logging的任何types的exception。 这具有明显的缺点,即只支持一组有限的exceptiontypes,并且每当添加新的exceptiontypes时都需要修改。