У меня есть бесконечный многопоточный загрузчик, который работает так:Python: Multihreading загрузчик блокирующие друг друг
queue = Queue() # links for downloading
def downloader(queue):
while:
link = queue.get()
# do download with requests library
for i in range(4):
task = Thread(target=downloader, args=(queue,))
task.start()
Очереди периодически наполненный новыми данных. Но когда я печатаю, какая связь была загружена, она выглядит как нити не работают параллельно, например:
time 0 - thread 1 - link 1
time 1 - thread 1 - link 2
time 2 - thread 1 - link 3
time 3 - thread 1 - link 4
time 4 - thread 2 - link 5
time 5 - thread 2 - link 6
time 6 - thread 2 - link 7
time 7 - thread 3 - link 8
time 8 - thread 3 - link 9
time 9 - thread 3 - link 10
time 10 - thread 1 - link 11
time 11 - thread 1 - link 12
Я надеялся, что это будет больше похоже на: нить 1 2 3 4 1 2 3 4 сервера имеет 4 cpus.
Благодаря
Можете ли вы показать код запроса? – Eloims
Как вы измеряете свое время? С какой частотой вы вставляете ссылки в 'queue'? Сколько времени занимает «загрузчик»? (Возможно ли, что каждое выполнение 'downloader' завершается _before_, следующая ссылка вставлена в' queue'?) Также обратите внимание, что многопоточность не обязательно использует все CPU. У вас также многопоточность на одном процессоре. –
Вкратце: 'session = запросы.Session()' 'session.cookies = login_cookies.copy()' 'для ссылки в ссылках:' 'data = session.get (url, params = {... }) '' , если data.status_code == 200: '' Fp = открыт (FilePath, 'термометр') '' fp.write (data.content) '' fp.close() ' – Greno