簡體   English   中英

python django,如何禁止從for循環轉到下一個代碼

[英]python django, How to prohibit go to the next code from for loop

def redirectTest(item):
    try:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
        }
        r = None
        try:
            r = requests.head(item, allow_redirects=False, headers=headers)
        except Exception as e:
            print(e)
        if r is not None:
            if r.status_code == 301:
                print("Tested: " + str(r.status_code))
            elif r.status_code == 302:
                print("Tested: " + str(r.status_code))
            else:
                print("Tested: " + str(r.status_code))
    except requests.exceptions.RequestException as e:
        print('error: ' + e)
    return

@ensure_csrf_cookie
def re_check_url(request):
    if request.method == "POST":
        if request.is_ajax():
            resolved_urls = ['twitch.tv/yumyumyu77']
            scheme_list = ['http://www.', 'http://', 'https://www.', 'https://']

            for item in resolved_urls:
                for scheme_item in scheme_list:
                    redirectTest(scheme_item + item)
            return JsonResponse({'res': 1})
        return JsonResponse({'res': 2})

此代碼檢查scheme + some url的響應。

但是,當我執行代碼時,我的Django終端會打印:

 r_status_code: 301
 r_status_code: 301
 r_status_code: 200
[22/Oct/2018 23:54:49] "POST /re/check/url/ HTTP/1.1" 200 10
 r_status_code: 301

問題:

我認為這意味着在此行前面return JsonResponse({'res': 1}) ,在此行之后或之后返回print("Tested: " + str(r.status_code))

有時會正常打印,但有時會異常打印。

題:

我了解到Python代碼是從上到下逐行執行的,但是似乎並沒有這樣做。

為什么會這樣呢? 以及如何解決?

它的執行順序不是我期望的。

編輯:

我試圖使用Lock()

    for item in resolved_urls:
        for scheme_item in scheme_list:
            from threading import Lock
            _lock = Lock()
            with _lock:
                redirectTest(scheme_item + item)

但是它似乎運行不佳。

一切實際上都正常工作。 200為成功,並且重定向到成功頁面。 然后它運行您的最后一個循環。

暫無
暫無

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

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