Форум сайта python.su
0
Доброго времени суток, уважаемые форумчане.
Столкнулся с такой проблемой, что при использовании так называемой “многопоточности” скрипт виснет. Ни ответа ни привета.
Суть задачи в следующем: скрипт берёт из БД IP свитчей (множества) и перебирая, обращается к ним в несколько потоков.
Упрощенный листинг:
[code python]#!/usr/local/bin/python2.7
#! -*- coding: utf-8 -*-
import MySQLdb
import os
import sys
from threading import Thread
import subprocess
from Queue import Queue
db = MySQLdb.connect(host='блаблабла', user='бла', passwd='бла', db='ещёразбла')
c = db.cursor()
num_threads = 20
queue = Queue()
def pinger(i, q):
while True:
switch = q.get()
from subprocess import Popen, PIPE, STDOUT
p, err = Popen('/usr/local/bin/snmpwalk -v2c -t 0.1 -c community '+switch+' , shell=True, stdout=PIPE).communicate()
if not p or 'No Such Instance currently exists at this OID' in p:
break
else:
k = p.split('SNMP')
for Line in k:
stroka = Line[:-1]
access_id = str.strip(stroka[a+1:a+4])
if '=' in access_id:
access_id = str.strip(access_id.replace('=',''))
elif not access_id or access_id=='' or access_id==' ':
continue
else:
access_id = access_id
print access_id
q.task_done()
for i in range(num_threads):
worker = Thread(target=pinger, args=(i, queue))
worker.setDaemon(True)
worker.start()
zap2 = "SELECT ip FROM table"
c.execute(zap2)
result1 = c.fetchall()
for i in range(len(result1)):
switch = str(result1[i][0])
queue.put(switch)
queue.join()
[/code]
Офлайн
857
Mahabharata871Для начала нужно поставить заглушку вместо Popen() и удостовериться, что потоки работают правильно.
как-то отдебажить чтоли
Mahabharata871Да, такие фрагменты есть:
Прошу прощения, если код кривоват
Mahabharata871Это что? Типа про pass не в курсе?else: access_id = access_id
>>> ' abc '.strip() 'abc' >>>
Mahabharata871elif not access_id or access_id=='' or access_id==' ':
elif not access_id.strip():
elif not access_id:
Mahabharata871for i in range(len(result1)): switch = str(result1[i][0]) queue.put(switch)
for i in result1: queue.put(str(i[0]))
Отредактировано py.user.next (Май 15, 2015 14:13:56)
Офлайн