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)