2

python-requests ライブラリBeautifulSoupを使用して HTTP リクエストを実行するマルチスレッド アプリケーションがあります。のホームページにpython-requestsはライブラリがスレッドセーフであると記載されていますが、セグメンテーション違反がpython-requests. スレッドセーフではない可能性があるかどうかはわかりBeautifulSoupませんが、その可能性も排除できません。

ここでコアダンプします。(~800KiB)

冗長性のためにここでもコアダンプします。(~800KiB)

これは、関連する Python コードの要約です。

import bs4
import requests
import time
from functools import partial
from threading import Thread


def get_response(url, phrase=''):
    proxy = '1.2.3.4:3128'
    proxy_config = { 'http':proxy, 'https':proxy, 'ftp':proxy }

    try:
        response = requests.get(url, proxies=proxy_config)
    except Exception as error:
        return False

    if response.status_code != 200:
        return False

    soup = bs4.BeautifulSoup(response.text)

    for element in soup.select('p'):
        # Check some things
        if things_checked == True:
             write_result(str(things))

    return True


def write_result(things=''):
    global output_file

    try:
        output_file.write(things)
        output_file.flush()
    except Exception as error:
        return False


def main(urls, phrases=[]):
    global output_file

    try:
        output_file = open('output.txt', 'a+', 1)
    except Exception as error:
        return False

    for url in urls:
        for phrase in phrases:
            t = Thread(target=partial(get_response, url, phrase))
            t.daemon = True
            t.start()

    time.sleep(10) # Actually, other non-related code runs here.
    return True


if __name__ == '__main__':
    urls = ['1.1.1.1', '2.2.2.2']
    phrases = ['john', 'paul', 'george', 'ringo']
    main(urls, phrases)
4

0 に答える 0