小编Khi*_*min的帖子

Python ThreadPoolExecutor 终止所有线程

我正在运行一段 python 代码,其中多个线程通过线程池执行程序运行。每个线程都应该执行一项任务(例如获取网页)。我希望能够做的是终止所有线程,即使其中一个线程失败。例如:

with ThreadPoolExecutor(self._num_threads) as executor:
    jobs = []
    for path in paths:
        kw = {"path": path}
        jobs.append(executor.submit(start,**kw))
    for job in futures.as_completed(jobs):
        result = job.result()
        print(result)
def start(*args,**kwargs):
    #fetch the page
    if(success):
        return True
    else:
        #Signal all threads to stop
Run Code Online (Sandbox Code Playgroud)

有可能这样做吗?除非所有线程都成功,否则线程返回的结果对我来说是无用的,因此即使其中一个失败,我也想节省其余线程的一些执行时间并立即终止它们。实际代码显然正在执行相对冗长的任务,有几个故障点。

python multithreading threadpoolexecutor concurrent.futures

8
推荐指数
1
解决办法
2319
查看次数

Python的all()/ any()之类的方法用于列表的一部分/一部分?

最优雅/ Python化的实现方式是:“如果列表中总值的x%大于y,则返回true”。我目前已经实现了一个功能:

def check(listItems, val):
   '''A method to check all elements of a list against a given value.
   Returns true if all items of list are greater than value.'''
   return all(x>val for x in listItems)
Run Code Online (Sandbox Code Playgroud)

但是对于我的用例来说,等待这种特殊条件是非常昂贵的,而且没有用。如果列表中〜80%的项目大于给定值,我想继续。我想到的一种方法是按降序对列表进行排序,创建另一个列表,然后将列表元素的80%复制到新列表中,然后为该新列表运行函数。但是,我希望必须有一种更优雅的方法。有什么建议么?

python loops for-in-loop

4
推荐指数
1
解决办法
88
查看次数