2017-07-28 96 views
0

我的數據庫在執行這個腳本時,數據庫已經丟失了數據,可能或多或少,會有很多空的數據。謝謝 下面的配置信息列表: SQLITE3 Django1.9.8 的Python 2.7.6多處理django模型數據庫

def flush_price(): 
    logging.error("Sub-process(es) begin.") 
    logging.error(int(time.time())) 
    key = '2500_wine_info.xlsx' 
    lists = import_excel(key) 
    lwin11s = [] 
    for item in lists: 
     lwin11s.append(str(item['LWIN11'])[:11]) 
    contracts = Contract.objects.filter(
     is_del=False, 
     wine__lwin11__in=lwin11s 
    ) 
    lwins = [] 
    for contract in contracts: 
     lwins.append(str(contract.wine.lwin)) 
    new_arrs = arr_split(lwins, 50) 
    now = conversion_reduce_8_time() 
    for index in range(1, 3641): 
     date_now = (now - datetime.timedelta(days=index)).strftime('%Y-%m-%d') 
     pool = multiprocessing.Pool(processes=len(new_arrs)) 
     for new_arr in new_arrs: 
      pool.apply_async(request_price, (new_arr, date_now,)) 
     pool.close() 
     pool.join() 
     break 
    logging.error(int(time.time())) 
    logging.error("Sub-process(es) done.") 


def request_price(new_arr, date_now): 
    headers = { 
     'CLIENT_KEY': CLIENT_KEY, 
     'CLIENT_SECRET': CLIENT_SECRET, 
     'ACCEPT': 'application/json', 
     'CONTENT-TYPE': 'application/json', 
    } 
    data = { 
     'lwin': new_arr, 
     'priceType': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K'], 
     "currency": "EUR", 
     "priceDate": date_now, 
    } 
    price_obj = download_page(VINEX_PRICE_API, request_type=1, data=json.dumps(data), headers=headers) 
    if price_obj.status_code == 200: 
     price_obj = price_obj.json() 
     if price_obj['httpCode'] == '200': 
      lwin_details = price_obj['lwinDetail'] 
      for lwin_detail in lwin_details: 
       # 取得參數 
       lwin = lwin_detail['lwin'] 
       # 取得對象信息 
       contract = Contract.objects.filter(is_del=False, wine__lwin=lwin).first() 
       wine = contract.wine 
       # 設置歷史數據更新 
       RedWinePriceData.objects.filter(
        is_del=False, 
        contract=contract, 
        lwin=lwin, 
       ).first() 
       redwinepricedata = RedWinePriceData() 
       redwinepricedata.contract = contract 
       redwinepricedata.lwin = lwin 
       # 改變數據 
       redwinepricedata.priceDate = format_time(detail['priceDate']) 
       redwinepricedata.save() 
       redwinepricedata.created = add_conversion_8_time(date_now) 
       redwinepricedata.save() 

Change the database information before; The changed database information

回答

0

Pool.apply_async也像Python的內置應用程序,除了調用立即返回而不是等待結果。 ApplyResult對象返回。你調用它的get()方法來檢索函數調用的結果。 get()方法阻塞,直到函數完成。因此,pool.apply(func, args,kwargs)相當於pool.apply_async(func, args,kwargs).get()。

+0

from django.db import connection connection.close() – loopbing