为什么在消耗Kafka消息的for循环内未调用dbproc函数?

时间:2018-09-15 19:43:01

标签: python-3.x kafka-consumer-api kyotocabinet

我有一个脚本,该脚本使用kafka消息,然后调用kyotocabinet函数根据收到的消息进行处理。

import json
import os
import sys
from datetime import datetime
from os.path import isfile, join

from elasticsearch import Elasticsearch
from kafka import KafkaConsumer, KafkaProducer
from kafka.errors import KafkaError
from pymongo import MongoClient

from kyotocabinet import *

client = MongoClient("localhost", 27017)
db = client["packages"]

es = Elasticsearch()
consumer = KafkaConsumer("versioned", group_id='es-embed', bootstrap_servers=['localhost:9092'])

def resolve_last_kch_version(package_path):
    message = {}
    onlyfiles = [f for f in os.listdir(package_path) if isfile(join(package_path, f))]
    kch_number = []
    for kch in onlyfiles:
        if "clone" in kch:
            continue
        if kch.endswith(".kch"):
            kch_number.append(int(kch.split(".kch")[0].split("_")[-1]))
    if len(kch_number) == 0:
        return False
    else:
        kch_number.sort()
        return (package_path + "/" + "version_" + str(kch_number[-1]) + ".kch")

db_kyoto = DB()

def dbproc(db_kyoto):
    for key in db_kyoto:
    print ("Inside dbproc")
        print (key)
        print (db_kyoto[key])

for message in consumer:
    message = eval(message.value)
    package = message["package_name"]
    package_path = db.packages.find_one({"package": package})["path"]
    # print (package_path)
    print (resolve_last_kch_version(package_path))
    DB.process(dbproc, resolve_last_kch_version(package_path))
    print ("Done.")

代码使用上面定义的函子来调用DB.process。我已经在函数中放置了一条消息,但从未打印过。好像从未调用过该函数。不过,此后的声明会打印出来。

我不知道如何称呼此函子?

0 个答案:

没有答案