sud*_*nym 11 screen-scraping web-scraping python-multithreading joblib python-multiprocessing
目前还不清楚如何Parallel在python中正确地删除joblib的工作者.其他人在这里,这里,这里和这里有类似的问题.
在我的例子中,我正在使用一个由50 joblib名工人组成的 threading后端池.
并行调用(线程):
output = Parallel(n_jobs=50, backend = 'threading')
(delayed(get_output)(INPUT)
for INPUT in list)
Run Code Online (Sandbox Code Playgroud)
在这里,Parallel挂起没有错误,len(list) <= n_jobs但只有在n_jobs => -1.
为了克服这个问题,人们给予 说明如何创建一个超时装饰的Parallel功能(get_output(INPUT)使用)在上面的例子)multiprocessing:
主要功能(装饰):
@with_timeout(10) # multiprocessing
def get_output(INPUT): # threading
output = do_stuff(INPUT)
return output
Run Code Online (Sandbox Code Playgroud)
多处理装饰器:
def with_timeout(timeout):
def decorator(decorated):
@functools.wraps(decorated)
def inner(*args, **kwargs):
pool = multiprocessing.pool.ThreadPool(1)
async_result = pool.apply_async(decorated, args, kwargs)
try:
return async_result.get(timeout)
except multiprocessing.TimeoutError:
return
return inner
return decorator
Run Code Online (Sandbox Code Playgroud)
将装饰器添加到其他工作代码会导致内存泄漏超过超时长度加上eclipse崩溃的2倍.
装饰者在哪里泄漏?
如何在python中进行多处理期间超时线程?
| 归档时间: |
|
| 查看次数: |
1016 次 |
| 最近记录: |