Я написал скрипт на python, который: 1. отправляет поисковые запросы 2. ожидает результатов 3. анализирует возвращаемые результаты (XML)
Я использовал модули Threading и Queue для параллельного выполнения этого (5работники).
Это прекрасно работает для части запросов, потому что я могу отправлять несколько поисковых запросов и иметь дело с результатами по мере их поступления.
Однако, похоже, что все мои потоки связаны с одним и тем же ядром.Это становится очевидным, когда он попадает в ту часть, где обрабатывает XML (интенсивно использует процессор).
Кто-нибудь еще сталкивался с этой проблемой?Я что-то упускаю концептуально?
Кроме того, я размышлял над идеей иметь две отдельные рабочие очереди, одну для выполнения запросов и одну для анализа XML.Как и сейчас, один работник будет делать оба в серийном режиме.Я не уверен, что это купит меня, если что-нибудь.Любая помощь будет принята с благодарностью.
Вот код: (удаленные данные удалены)
def addWork(source_list):
for item in source_list:
#print "adding: '%s'"%(item)
work_queue.put(item)
def doWork(thread_id):
while 1:
try:
gw = work_queue.get(block=False)
except Queue.Empty:
#print "thread '%d' is terminating..."%(thread_id)
sys.exit() # no more work in the queue for this thread, die quietly
##Here is where i make the call to the REST API
##Here is were i wait for the results
##Here is where i parse the XML results and dump the data into a "global" dict
#MAIN
producer_thread = Thread(target=addWork, args=(sources,))
producer_thread.start() # start the thread (ie call the target/function)
producer_thread.join() # wait for thread/target function to terminate(block)
#start the consumers
for i in range(5):
consumer_thread = Thread(target=doWork, args=(i,))
consumer_thread.start()
thread_list.append(consumer_thread)
for thread in thread_list:
thread.join()