簡體   English   中英

帶有線程的隨機python模塊加載失敗

[英]Random python module loading failures with threading

我正在嘗試調試一個錯誤,其中python import語句隨機失敗,而其他時候它們運行得很干凈。

這是我看到的異常的一個示例。 有時我會看到這個,有時我會在另一個模塊中看到另一個,盡管它似乎總是出現在4個模塊之一中。

ERROR:root:/home/user/projecteat/django/contrib/auth/management/__init__.py:25:     RuntimeWarning: Parent module 'django.contrib.auth.management' not found while handling absolute import
from django.contrib.contenttypes.models import ContentType

由於隨機性,我幾乎可以肯定這是一個線程問題,但是我不明白為什么會出現導入錯誤,因此我不確定要在調試中尋找什么。 如果不同的線程試圖加載相同的模塊,這可能是由文件系統爭用引起的嗎?

我正在嘗試讓Django 1.4的LiveServerTestCase在Google App Engine的開發服務器上工作。 主線程運行django的測試框架。 加載基於LiveServerTestCase的測試類時,它會生成一個子線程,該子線程將啟動App Engine dev_appserver(這是本地網絡服務器)。 主線程使用Selenium驅動程序發出HTTP請求,繼續運行測試,該請求由子線程上的dev_appserver處理。

在刪除測試用例類之前,測試框架可以在基於LiveServerTestCase的類中運行一些測試。 拆卸時,子線程結束。

看起來異常發生在子線程(HTTP服務器)中,通常在單個測試用例類中的測試之間。

App Engine LiveServerTestCase類的代碼在此處: https : //github.com/dragonx/djangoappengine/blob/django-1.4/test.py

提供此問題所需的所有調試信息非常困難。 我主要是在尋找有關為什么python import語句會產生RuntimeWarning錯誤的建議。

我對自己的問題有部分答案。 這是怎么回事,我有兩個線程在運行。

線程1正在運行dev_appserver(dev_appserver_main)內部的主要內部函數,該函數正在處理HTTP請求。

線程2正在運行基於Selenium的測試用例。 該線程將向瀏覽器發送命令以執行某些操作(然后間接生成HTTP請求並重新進入線程1)。 然后,它向Selenium發出更多請求以檢查狀態,或進行數據存儲區查詢以檢查結果。

認為問題在於,在處理每個HTTP請求時,線程1(dev_appserver)會更改環境,以便某些文件夾不可訪問(app.yaml中排除的文件夾以及不屬於appengine的環境)。 如果線程2恰巧此時運行某些代碼,則某些導入文件如果位於這些文件夾中,則可能無法加載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM