相关疑难解决方法(0)

如何在超时后中止multiprocessing.Pool中的任务?

我试图以这种方式使用python的多处理包:

featureClass = [[1000,k,1] for k in drange(start,end,step)] #list of arguments
for f in featureClass:
  pool .apply_async(worker, args=f,callback=collectMyResult)
pool.close()
pool.join
Run Code Online (Sandbox Code Playgroud)

从池的进程我想避免等待超过60秒的那些返回其结果.那可能吗?

python multiprocessing python-multiprocessing

14
推荐指数
2
解决办法
2万
查看次数

Python多处理池超时

我想使用multiprocessing.Pool,但是multiprocessing.Pool不能在超时后中止任务。我找到了解决方案,并对其进行了一些修改。

from multiprocessing import util, Pool, TimeoutError
from multiprocessing.dummy import Pool as ThreadPool
import threading
import sys
from functools import partial
import time


def worker(y):
    print("worker sleep {} sec, thread: {}".format(y, threading.current_thread()))
    start = time.time()
    while True:
       if time.time() - start >= y:
           break
       time.sleep(0.5)
       # show work progress
       print(y)
    return y


def collect_my_result(result):
    print("Got result {}".format(result))


def abortable_worker(func, *args, **kwargs):
    timeout = kwargs.get('timeout', None)
    p = ThreadPool(1)
    res = p.apply_async(func, args=args)
    try:
        # Wait timeout …
Run Code Online (Sandbox Code Playgroud)

python multithreading multiprocessing python-multithreading python-multiprocessing

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