コード例 #1
0
def wait_for_possible_has_finish_all_tasks(queue_name: str, minutes: int, send_stop_to_broker=0, broker_kind: int = 0, ):
    """
      由于是异步消费,和存在队列一边被消费,一边在推送,或者还有结尾少量任务还在确认消费者实际还没彻底运行完成。  但有时候需要判断 所有任务,务是否完成,提供一个不精确的判断,要搞清楚原因和场景后再慎用。
    :param queue_name: 队列名字
    :param minutes: 连续多少分钟没任务就判断为消费已完成
    :param send_stop_to_broker :发送停止标志到中间件,这回导致消费退出循环调度。
    :param broker_kind: 中间件种类
    :return:
    """
    if minutes <= 1:
        raise ValueError('疑似完成任务,判断时间最少需要设置为2分钟内,最好是是10分钟')
    pb = get_publisher(queue_name, broker_kind=broker_kind)
    no_task_time = 0
    while 1:
        # noinspection PyBroadException
        try:
            message_count = pb.get_message_count()
        except Exception as e:
            nb_print(e)
            message_count = -1
        if message_count == 0:
            no_task_time += 30
        else:
            no_task_time = 0
        time.sleep(30)
        if no_task_time > minutes * 60:
            break
    if send_stop_to_broker:
        pb.publish({'stop': 1})
    pb.close()
コード例 #2
0
 def publisher_of_same_queue(self):
     if not self._publisher_of_same_queue:
         self._publisher_of_same_queue = get_publisher(self._queue_name, consuming_function=self.consuming_function,
                                                       broker_kind=self.BROKER_KIND)
         if self._msg_expire_senconds:
             self._publisher_of_same_queue.set_is_add_publish_time()
     return self._publisher_of_same_queue
コード例 #3
0
 def bulid_a_new_publisher_of_same_queue(self):
     return get_publisher(self._queue_name, broker_kind=self.BROKER_KIND)