线程池某个线程异常,线程池一个线程异常,其他线程

  线程池某个线程异常,线程池一个线程异常,其他线程

  我一直在寻找一个简单的大蟒线程池模式的良好实现,实际上找不到任何适合我需要的东西。我正在使用python 2.7,我发现的所有模块都不起作用,或者没有正确处理工作程序中的异常。我想知道是否有人知道可以提供我正在搜索的功能类型的库。非常感谢。

  多处理

  我的第一次尝试是使用内置的多重处理模块,但由于这不使用线程而是使用子进程,而是遇到了无法对对象进行泡菜的问题。不要去这里。

  从多处理导入池

  类别示例(对象):

  定义compute_fib(self,n):

  =(1 5 * * 0.5)/2

  自我。fib=int(round((phi * * n-(1-phi)* * n)/5 * * 0.5))

  样本=[范围(8)中我的样本()

  池=池(进程=8)

  对于示例中的s:游泳池。apply _ async(s . compute _ fib,[20])

  pool.join()

  对于样品中的硫:打印硫纤维

  # PicklingError:无法泡菜:属性查找__内置_ _ .实例方法失败

  期货

  所以我看到有一个python 3.2在这里的一些很酷的并发功能的后端口。这似乎完美且易于使用。问题是忐忑的钢笔在其中一个工人中得到一个异常时,你只得到异常的类型,例如"零除法错误"但没有回溯,因此没有指示哪一行导致了异常。代码变得无法调试。不行。

  来自并行进口期货

  类别示例(对象):

  定义compute_fib(self,n):

  =(1 5 * * 0.5)/2

  1/0

  自我。fib=int(round((phi * * n-(1-phi)* * n)/5 * * 0.5))

  样本=[范围(8)中我的样本()

  资金池=期货ThreadPoolExecutor(max _ workers=8)

  线程=[池。submit(s . compute _ fib,20) for s in samples]

  wait(threads,return_when=futures .FIRST _异常)

  对于线程中的测试:测试结果()

  对于样品中的硫:打印硫纤维

  # futures-2.1.3-py2.7.egg/concurrent/futures/_base.pyc在_ _获取结果(自身)

  # 354 def __get_result(self):

  # 355如果自我。_异常:

  # - 356提高自我。_异常

  # 357其他:

  # 358回归自我。_结果

  #

  # ZeroDivisionError:整数除法或以零为模

  工作者池

  我找到了这种模式的其他实现这里。这次发生异常时会打印出来,但是我的分析交互式解释器处于挂起状态,需要从其他壳中杀死。不行。

  导入工人池

  类别示例(对象):

  定义compute_fib(self,n):

  =(1 5 * * 0.5)/2

  1/0

  自我。fib=int(round((phi * * n-(1-phi)* * n)/5 * * 0.5))

  样本=[范围(8)中我的样本()

  池=工作池。工人池(大小=8)

  对于样本中的s: pool.map(s.compute_fib,[20])

  pool.wait()

  对于样品中的硫:打印硫纤维

  # ZeroDivisionError:整数除法或以零为模

  # ^C^C^C^C^C^C^C^C^D^D

  # $杀死1783

  线程池

  还有另一种实施这里。这次发生异常时,会将其打印到stderr,但脚本不会被中断而是继续执行,这会违反异常的目的并使事情变得不安全。仍然无法使用。

  导入线程池

  类别示例(对象):

  定义compute_fib(self,n):

  =(1 5 * * 0.5)/2

  1/0

  自我。fib=int(round((phi * * n-(1-phi)* * n)/5 * * 0.5))

  样本=[范围(8)中我的样本()

  池=线程池。线程池(8)

  请求=[线程池。请求(s . compute _ fib,[20])样本中的s]

  requests=[y for x in requests for y in x]

  对于请求中的r:泳池。上传请求(r)

  pool.wait()

  对于样品中的硫:打印硫纤维

  # ZeroDivisionError:整数除法或以零为模

  # ZeroDivisionError:整数除法或以零为模

  # ZeroDivisionError:整数除法或以零为模

  # ZeroDivisionError:整数除法或以零为模

  # ZeroDivisionError:整数除法或以零为模

  # ZeroDivisionError:整数除法或以零为模

  # ZeroDivisionError:整数除法或以零为模

  # ZeroDivisionError:整数除法或以零为模

  # - 17代表样品中的学生:打印s纤维

  #

  #属性错误:“样本”对象没有属性“撒谎”

  -更新-

  看来,关于未来库,python 3的行为与python 2不同。

  期货_异常。py:

  从并行未来导入ThreadPoolExecutor,已完成

  def div_zero(x):

  返回x/0

  使用ThreadPoolExecutor(max _ workers=4)作为执行器:

  futures=executor.map(div_zero,range(4))

  对于完工状态下的将来(将来):打印(将来)

  Python 2.7.6输出:

  回溯(最近一次呼叫):

  文件. futures_exceptions.py ,第12行,在

  对于已完成的将来(将来):

  文件.python 2.7/site-packages/concurrent/futures/_ base。py ,第198行,在已完成中

  with _AcquireFutures(fs):

  文件.python 2.7/site-packages/concurrent/futures/_ base。py ,第147行,在__init__中

  self.futures=sorted(futures,key=id)

  文件.python 2.7/site-packages/concurrent/futures/_ base。py ,地图中的第549行

  yield future.result()

  文件.python 2.7/site-packages/concurrent/futures/_ base。py ,结果中的第397行

  回归自我__get_result()

  文件.python 2.7/site-packages/concurrent/futures/_ base。py ,第356行,在_ _获取结果中

  提升自我。_异常

  ZeroDivisionError:整数除法或以零为模

  Python 3.3.2输出:

  回溯(最近一次呼叫):

  文件. futures_exceptions.py ,第11行,在

  对于已完成的将来(将来):

  文件.python 3.3/concurrent/futures/_ base。py ,第193行,在已完成中

  with _AcquireFutures(fs):

  文件.python 3.3/concurrent/futures/_ base。py ,第142行,在__init__

  self.futures=sorted(futures,key=id)

  文件.python 3.3/concurrent/futures/_ base。py ,第546行,在结果迭代器中

  yield future.result()

  文件.python 3.3/concurrent/futures/_ base。py ,结果中的第392行

  回归自我__get_result()

  文件.python 3.3/concurrent/futures/_ base。py ,第351行,在_ _获取结果中

  提升自我。_异常

  文件.python 3.3/并发/期货/线程。py ,第54行,运行中

  result=self.fn(*self.args,**self.kwargs)

  文件.futures_exceptions.py ,div_zero中的第七行

  返回x/0

  ZeroDivisionError:除以零

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: