# coding=utf-8
import requests
import time
import os
from threading import Thread, current_thread
from Queue import Queue
theard_count = 25
domain_file = "domains.txt"
domain_temp = "temp"
def check_url(host):
url = 'http://' + host
try:
requests.get(url, timeout=5)
except Exception:
return False
else:
return True
def run(queue, result_queue):
# Цикл продолжается пока очередь задач не станет пустой
while not queue.empty():
# получаем первую задачу из очереди
host = queue.get_nowait()
print '{} checking in thread {}'.format(host, current_thread())
# проверяем URL
status = check_url(host)
# сохраняем результат для дальнейшей обработки
result_queue.put_nowait((status, host))
# сообщаем о выполнении полученной задачи
queue.task_done()
print '{} finished in thread {}. Result={}'.format(host, current_thread(), status)
print '{} closing'.format(current_thread())
# MAIN
def main():
start_time = time.time()
# Для получения задач и выдачи результата используем очереди
queue = Queue()
result_queue = Queue()
fr_success = os.path.join(domain_temp, "req-good.txt")
fr_errors = os.path.join(domain_temp, "req-error.txt")
# Сначала загружаем все URL из файла в очередь задач
with open(domain_file) as f:
for line in f:
queue.put(line.strip())
# Затем запускаем необходимое количество потоков
for i in range(theard_count):
thread = Thread(target=run, args=(queue, result_queue))
thread.daemon = True
thread.start()
# И ждем, когда задачи будут выполнены
queue.join()
# После чего пишем результаты в файлы
with open(fr_success, 'w') as fs, open(fr_errors, 'w') as fe:
while not result_queue.empty():
status, host = result_queue.get_nowait()
if status:
f = fs
else:
f = fe
f.write(host)
f.write('\n')
print time.time() - start_time
if __name__ == '__main__':
main()
<!DOCTYPE html>
<html lang="ru-RU">
<head>
<meta charset="UTF-8">
<meta name="author" content="reskwer">
<title>Что-то на CodePen</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="content">
<p>Cras dapibus, leo a euismod luctus, nibh orci tempor mi, non accumsan odio nunc sit amet magna. Curabitur gravida dolor non mi mollis, vitae vehicula ante blandit. Curabitur congue neque sapien, at vestibulum</p>
<div class="circle1"></div>
<div class="circle2"></div>
<div class="circle3"></div>
<div class="circle4"></div>
</div>
</body>
</html>
html{
height: 100%;
}
body{
background: #666;
}
.circle1{
width: 80px;
height: 80px;
border-radius: 50%;
border: 1px solid rgba(100,149,237,.5);
background: rgba(255,235,205,.5);
position: absolute;
top: 0;
left: 0;
}
.circle2{
width: 160px;
height: 160px;
border-radius: 50%;
border: 1px solid rgba(100,149,237,.5);
background: rgba(0,191,55,.5);
position: absolute;
top: 74px;
left: 164px;
}
.circle3{
width: 120px;
height: 120px;
border-radius: 50%;
border: 1px solid rgba(100,149,237,.5);
background: rgba(102,205,270,.5);
position: absolute;
top: 122px;
left: 83px;
}
.circle4{
width: 100px;
height: 100px;
border-radius: 50%;
border: 1px solid rgba(100,149,237,.5);
background: rgba(0,100,0,.5);
position: absolute;
top: 267px;
left: 148px;
}
.content{
width: 400px;
height: 400px;
position: relative;
background: linear-gradient(90deg,rgba(255, 255, 255, 0) 1.8em, rgba(135, 206, 235, .5) 2em)4em 0 repeat-y,linear-gradient(rgba(255,255,255, 0) 1.9em, rgba(0, 0, 0, .15) 2em)0 0;
background-size: 2em 2em;
background-color: ivory;
font: 16px/2 'Trebuchet MS', Verdana, sans-serif;
}
p{
margin: 2.5em 3em 1em 8em;
}
<script data-main="scripts/main.js" src="scripts/require.js"></script>
requirejs.config({
"paths": {
"jquery": "//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min"
}
});
define(["jquery"], function($) {
$(function() {
});
});