Я создаю веб-браузер, который будет очищать несколько доменов в разных потоках.Поскольку существует много разных доменов, я хотел бы иметь возможность искать зарегистрированную информацию по каждой теме.
ОБНОВЛЕНИЕ: решение реализовано в коде.Следуйте # линиям РЕШЕНИЯ
Сценарий был настроен следующим образом:
import logging
from queue import Queue, Empty
from threading import current_thread # SOLUTION
from concurrent.futures import ThreadPoolExecutor
logging.basicConfig(
format='%(threadName)s %(levelname)s: %(message)s',
level=logging.INFO
)
class Scraper:
def __init__(self, max_workers):
self.pool = ThreadPoolExecutor(max_workers = max_workers, thread_name_prefix='T')
self.to_crawl = Queue()
for task in self.setup_tasks(tasks=max_workers):
logging.info('Putting task to queue:\n{}'.format(task))
self.to_crawl.put(task)
logging.info('Queue size after init: {}'.format(self.to_crawl.qsize()))
def setup_tasks(self, cur, tasks=1):
# Prepare tasks for the queue
def run_task(self, task):
# Function for executing the task
current_thread().name = task['id'] # SOLUTION
logging.info('Executing task:\n{}'.format(task))
id = task['id'] # I want the task id to be reflected in the logging function for when run_task runds
def run_scraper(self):
while True:
logging.info('Launching new thread, queue size is {}'.format(self.to_crawl.qsize()))
try:
task = self.to_crawl.get()
self.pool.submit(self.run_task, task)
except Empty:
break
if __name__ == '__main__':
s = Scraper(max_workers=3)
s.run_scraper()
Я хотел бы добавить task['id']
в конфигурацию форматирования журнала вместо заданного %(threadName)s
, не делая этого вручную каждый раз, когда скрипт регистрирует что-то в run_task
Есть ли способ присвоить task['id']
потоку %(threadName)s
, когда поток принимает задачу в run_scraper