相关疑难解决方法(0)

有没有办法杀死一个线程?

是否可以在不设置/检查任何标志/信号量/等的情况下终止正在运行的线程?

python multithreading kill terminate

710
推荐指数
16
解决办法
71万
查看次数

Gracefull python joblib kill

是否可以优雅地终止 joblib进程(线程后端),并仍然返回到目前为止的计算结果?

parallel = Parallel(n_jobs=4, backend="threading")
result = parallel(delayed(dummy_f)(x) for x in range(100))
Run Code Online (Sandbox Code Playgroud)

目前我想出了两个解决方案

  • parallel._aborted = True 等待开始的工作完成(在我的情况下它可能很长)
  • parallel._terminate_backend()如果作业仍在管道中(parallel._jobs非空),则挂起

有没有办法解决 lib 来做到这一点?

python joblib

9
推荐指数
1
解决办法
1218
查看次数

joblib:并行总是卡在最后

我的Parallel用途:

sdf = Parallel(n_jobs=3, verbose=1, pre_dispatch='1.5*n_jobs')(delayed(char_etl)(x,k1,k2,k3) for x in X)
Run Code Online (Sandbox Code Playgroud)

X是一个列表.char_etl,是一个字符串匹配函数。

我使用的版本是:python 2.7.11、centos 6.7、joblib 0.11

每次都卡住了,像这样:

[Parallel(n_jobs=3)]: Done 89 tasks | elapsed: 10.9s
[Parallel(n_jobs=3)]: Done 258 tasks | elapsed: 46.8s
[Parallel(n_jobs=3)]: Done 552 tasks | elapsed: 1.7min
[Parallel(n_jobs=3)]: Done 902 tasks | elapsed: 2.7min
[Parallel(n_jobs=3)]: Done 997 out of 1000 | elapsed: 2.9min remaining: 0.5s
Thanks.
Run Code Online (Sandbox Code Playgroud)

python parallel-processing joblib

7
推荐指数
0
解决办法
832
查看次数

Python 多处理脚本似乎没有错误地冻结

我正在尝试使用该multiprocessing包myfunc并行调用一个函数(让我们称之为),特别是使用pool.mapie pool.map(myfunc, myarglist)。当我简单地循环myarglist而不使用时multiprocessing,没有错误,应该是这种情况,因为所有操作myfunc都在一个try块内调用。但是,当我使用pool.map脚本调用该函数时,总是会停止运行,即它停止打印“myfunc done!” 我的函数中的语句和进程停止使用 CPU,但它永远不会返回resultlist. 我从 ubuntu 12.04 的终端运行 python 2.7。什么可能导致这种情况发生,我应该如何修复/排除问题?

cpu_count = int(multiprocessing.cpu_count())
pool = Pool(processes = cpu_count)
resultlist = pool.map(myfunc, myarglist)
pool.close()
Run Code Online (Sandbox Code Playgroud)

更新 使用多处理时的一个问题可能是对象的大小,如果您认为这可能是一个问题,请参阅此答案。正如答案指出的那样“如果这个 [解决方案] 不起作用,那么您从函数中返回的东西可能是不可腌制的,因此无法正确地通过队列。” 多处理通过酸洗对象在进程之间传递对象。事实证明,我的一两个对象有汤BeautifulSoup ,不会腌制。

python multiprocessing python-2.7 ubuntu-12.04

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