Столкнулся с такой проблемой, что при использовании так называемой “многопоточности” скрипт виснет. Ни ответа ни привета.
Суть задачи в следующем: скрипт берёт из БД 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]
Прошу прощения, если код кривоват, я не программист, просто по работе возникла задача.
Так вот, он работает до каких-то пор, проходит несколько свитчей, а потом просто виснет и закономерности я никак не найду(
Ткните носом, где может быть зтык или как можно увидеть причину, как-то отдебажить чтоли.
Заранее благодарю.