def stop(request, task_id=None): control = Control(app=app) control.revoke(task_id, terminate=True) file_obj = FileData.objects.get(task_id=task_id) file_obj.status = 'Canceled' file_obj.save() return Response({'success': True}, status=200)
def cancel_celery_task(self, kill=False): """ Make sure we cancel the task (if in queue/scheduled). :param: kill Also kill the task if it's running, defaults to False. """ celery_control = Control(current_app) celery_control.revoke(task_id=self.celery_task_id, terminate=kill)
def revoke_p_task(pr_id): """ 中止指定流程所有taskid:name=faconstor.tasks.exec_process的最新任务中止 return status{bool}: 1 成功 2 失败 0 任务不存在 """ status = 0 try: task_url = "http://127.0.0.1:5555/api/tasks" try: task_json_info = requests.get(task_url).text except: status = 2 else: task_dict_info = json.loads(task_json_info) c_control = Control(app=app) for key, value in task_dict_info.items(): try: task_process_id = value["args"][1:-1].split(',')[0][1:-1] except: task_process_id = "" # 终止指定流程的异步任务 if task_process_id == pr_id and value[ "name"] == "drm.tasks.run_workflow": task_id = key print(key) c_control.revoke(str(task_id), terminate=True) status = 1 except Exception as e: print(e) status = 2 return status
def stop_process(): try: global do_process if do_process: print('终止任务') ctrl = Control(app=app) ctrl.revoke(str(do_process.id), terminate=True) do_process = None except Exception as e: logger.error(e)
def stop_calibrate(): try: global calibrate_process print(calibrate_process) if calibrate_process: print('终止任务') ctrl = Control(app=app) ctrl.revoke(str(calibrate_process.id), terminate=True) calibrate_process = None except Exception as e: logger.error(e)
def task_e(tid): control = Control(app) inspect = control.inspect() if True: active = inspect.active() running_jobs = [] if active != None: for key, value in active.items(): running_jobs.extend(value) if len(running_jobs) == 1: control.revoke(tid,terminate=True) print 'revoke ', tid
def revoke_p_task(pr_id): """ 中止指定流程所有taskid:name=faconstor.tasks.exec_process的最新任务中止 return status{bool}: 1 成功 2 失败 0 任务不存在 """ status = 0 try: task_url = "http://127.0.0.1:5555/api/tasks" try: task_json_info = requests.get(task_url).text except: status = 2 else: task_dict_info = json.loads(task_json_info) c_control = Control(app=app) for key, value in task_dict_info.items(): try: task_process_id = int(value["args"][1:-1]) except: task_process_id = "" # 终止指定流程的异步任务 if task_process_id == pr_id and value["name"] == "faconstor.tasks.exec_process": task_id = key print(key) c_control.revoke(str(task_id), terminate=True) status = 1 except Exception as e: print(e) status = 2 if status == 1: # 修改processrun.walkthoughstate try: ProcessRun.objects.filter(id=pr_id).update(**{ "walkthroughstate": "STOP" }) except: pass return status
def clear_twitter(): control = Control(app) #control.cancel_consumer('streamapi') # queue name, must probably be specified once per queue, but my app uses a single queue inspect = control.inspect() if True: active = inspect.active() print active running_jobs = [] if active != None: for key, value in active.items(): running_jobs.extend(value) if len(running_jobs) > 0: print("{} jobs running: {}".format(len(running_jobs), ", ".join(job["name"] for job in running_jobs))) for job in running_jobs: #if job['name'] == 'fetch': control.revoke(job["id"],terminate=True) discard_all() #time.sleep(10) else: print("No running jobs") app2 = state.State() cont = Control() i = Inspect() query = app2.tasks_by_type('fetch') print 'query ' ,query for uuid, task in query: #cont.revoke(uuid, terminate=True) print uuid, task #cont.purge() a = discard_all() print a
from celery.result import AsyncResult # 获取app队列信息 queue_info = app.connection().channel().queue_declare('proj', passive=True) print('message count:', queue_info.message_count) # 清空队列 app.connection().channel().queue_purge('proj') result = add.delay(4, 4) # 获取task id print("task id: ", str(result.id)) # 获取task对象 task = AsyncResult(str(result.id)) # 获取task状态,进入开始执行状态 time.sleep(1) print("task status: ", task.status) celery_control = Control(app=app) # 属于强制终止,后台会有报错信息 celery_control.revoke(str(result.id), terminate=True, signal='SIGKILL') # 进入任务撤销状态 time.sleep(1) print("task done: ", task.status) # # 同步阻塞等待结果 # print("result: ", result.get(timeout=1)) # 参数签名 s1 = mul.s(2, 2) res = s1.delay() print("signature result: ", res.get())
def tasksrevoke(task_id): inspecter = Control(celery) inspecter.revoke(task_id, terminate=True) return jsonify({}), 202, {'terminated':True}
try: client = pymongo.MongoClient(port=self.mongod_port) client.server_info() break except: print("Mongo d not online yet") # mm = MongoManager() # mm.start() # mm.wait_for_mongo_online() print("Everythinh started. Waiting for task finishing") ans = tasks.hello.delay() import time print("Waiting 5 seconds before revoking") time.sleep(5) celery_control = Control(tasks.app) celery_control.revoke(ans.id, terminate=True, signal=signal.SIGHUP) revoke(ans.id, terminate=True, signal=signal.SIGHUP) tasks.app.control.revoke(ans.id, terminate=True, signal=signal.SIGHUP) ans.revoke(terminate=True, signal=signal.SIGHUP) tasks.app.control.revoke(ans.id, terminate=True, signal='SIGKILL') AsyncResult(ans.id, app=tasks.app).revoke(terminate=True, signal='SIGKILL') ans.revoke(terminate=True, signal='SIGKILL') print("Revoked function") print(ans.get()) # mm.kill()