2017-04-12 27 views
1

Celeryの周期関数を使用してデータベースのバッチ更新を行っています。挿入されるデータは、同じスクリプトの他の関数によってグローバルリストに格納されます。問題は、Periodic関数が実行されるたびに、リストが空のものとして表示されることです。続きCeleryのPeriodic関数とPythonの関数の間でグローバル変数を共有する方法

は同じのためのコードスニペットです:

client = MongoClient('localhost:27017') 
db  = client.module_data 
batchData = [] 


@periodic_task(run_every=(crontab(minute='*/1')), name='Batch_Update') 
def batchUpdate(): 
    global batchData 
    print batchData 
    if len(batchData)>0: 
     db.logs.insert_many([_data for _data in batchData]) 

def writeLog(event='', method='', execution_time=0.0): 

    global batchData 

    if event=='' or method=='' or execution_time==0.0: 
     return 

    _date = datetime.now() 
    _data = {'event':event, 'method':method, 'execution_time':execution_time, 'date':_date} 

    #db.logs.insert(_data) 
    batchData.append(_data) 
    print batchData 

誰かがこれで私を助けることができますか?

答えて

0

バックエンドを使用してください。私が見ることができるようにそれはモンゴです。 writeLogを実行しているときにデータをmongodbに保存し、batchUpdateにそれを読んでください。 保存したいデータの性質に注意してください。おそらく、pickleまたはjsonとしてシリアル化可能である必要があります。

関連する問題