和同學一起做了個web應用,部署到騰訊云服務器,希望可以自動更新資料(可以通過定時爬蟲獲取最新的json資料),并每日自動入庫,入庫時間大約需要2-3分鐘。希望此時也可以正常回應用戶請求。嘗試用多執行緒解決,然而遇到一個bug,manage.py檔案里的函式會連續呼叫兩次,部分代碼如下:
def import_data_func():
while True:
print(threading.current_thread().name+'開始入庫')
#資料庫使用的是sqlite3
#import_data_logic_func是資料更新函式,大約需要2-3min執行
#主要功能:創建新表并把json檔案加載資料——洗掉舊表——新表重命名為舊表名
import_data.import_data_logic_func()
print(threading.current_thread().name+'入庫完成')
time.sleep(3600*24) #每天自動更新資料
import_data_thread = threading.Thread(target=import_data_func)
import_data_thread.start()
#以下就是manage.py自帶的啟動代碼
def main():
print("1") #測驗
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Rumor_of_COVID_19.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
然后就很amazing啊,啟動服務后:

不知為啥會這樣,且造成了更新資料后,db里的資料錯誤。 import_data函式單獨測驗過,沒有問題的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/283139.html
