- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在创建一个线程化的 python 脚本,它将一些主机/ips 放入队列中,然后未知数量的线程(默认为 10)从队列中获取这些主机并执行 snmp 查询。 Snmp 查询正在运行,但每个线程都在查询所有主机。主机只想接收来自随机线程的单个调用。在这里,我从每个线程获得对主机的调用。
#!/usr/bin/env python
import Queue
import threading
import urllib2
import time
import datetime
import netsnmp
import pprint
queue = Queue.Queue()
class ThreadUrl(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
while True:
#grabs host from queue
item = self.queue.get()
print item
#grabs urls of hosts and prints first 1024 bytes of page
dane = get_rittal(item)
obj_in_que = self.queue.qsize()
#print obj_in_que
print dane + "\n"
#signals to queue job is done
self.queue.task_done()
def log(message):
now = datetime.datetime.now().strftime("%H:%M:%S")
print "%s %s\n" % (now, message)
def convert(val,div):
string = str(val)
f = '%05.2f' % (float(string)*div)
return f
def get_rittal(rittal):
x = netsnmp.Session(Version=1,DestHost=rittal,Community='',Timeout=25000, Retries=3)
oid_loadA = netsnmp.Varbind('.1.3.6.1.4.1.2606.100.1.2.2.1.7.1',1)
oid_loadB = netsnmp.Varbind('.1.3.6.1.4.1.2606.100.1.2.2.1.7.1',2)
oid_loadC = netsnmp.Varbind('.1.3.6.1.4.1.2606.100.1.2.2.1.7.1',3)
all_oids = netsnmp.VarList(oid_loadA, oid_loadB, oid_loadC)
get = list(x.get(all_oids))
loadA = convert(get[0],0.01)
loadB = convert(get[1],0.01)
loadC = convert(get[2],0.01)
res = 'Host:' + rittal + '\t\tLA:' + loadA + 'A LB:' + loadB + 'A LC:' + loadC + 'A'
return res
start = time.time()
def main():
list=[]
for line in open ("test", "r").readlines():
for h in line.rstrip('\n').split(' '):
#print h
list.append(h)
x = str(len(list))
print "Ilosc rittali = " + x
print list;
#spawn a pool of threads, and pass them queue instance
for i in range(10):
t = ThreadUrl(queue)
t.setDaemon(True)
t.start()
#populate queue with data
for item in list:
queue.put(item)
#wait on the queue until everything has been processed
queue.join()
main()
print "Elapsed Time: %s" % (time.time() - start)
示例输出:
['host1', 'host2', 'host3']
Host:host1 LA:00.00A LB:00.00A LC:00.38A
Host:host2 LA:00.00A LB:00.00A LC:00.00A
Host:host3 LA:00.75A LB:01.13A LC:09.50A
Host:host1 LA:00.00A LB:00.00A LC:00.38A
Host:host2 LA:00.00A LB:00.00A LC:00.00A
Host:host3 LA:00.75A LB:01.13A LC:09.50A
Host:host1 LA:00.00A LB:00.00A LC:00.38A
Host:host2 LA:00.00A LB:00.00A LC:00.00A
Host:host3 LA:00.75A LB:01.13A LC:09.50A
Host:host1 LA:00.00A LB:00.00A LC:00.38A
Host:host2 LA:00.00A LB:00.00A LC:00.00A
Host:host3 LA:00.75A LB:01.13A LC:09.50A
Host:host1 LA:00.00A LB:00.00A LC:00.38A
Host:host2 LA:00.00A LB:00.00A LC:00.00A
Host:host3 LA:00.75A LB:01.13A LC:09.50A
Host:host2 LA:00.00A LB:00.00A LC:00.00A
Host:host1 LA:00.00A LB:00.00A LC:00.38A
Host:host3 LA:00.75A LB:01.13A LC:09.63A
Host:host1 LA:00.00A LB:00.00A LC:00.38A
Host:host2 LA:00.00A LB:00.00A LC:00.00A
Host:host3 LA:00.75A LB:01.13A LC:09.63A
Host:host1 LA:00.00A LB:00.00A LC:00.38A
Host:host2 LA:00.00A LB:00.00A LC:00.00A
Host:host3 LA:00.75A LB:01.13A LC:09.63A
Host:host2 LA:00.00A LB:00.00A LC:00.00A
Host:host1 LA:00.00A LB:00.00A LC:00.38A
Host:host3 LA:00.75A LB:01.13A LC:09.63A
Host:host1 LA:00.00A LB:00.00A LC:00.38A
Host:host2 LA:00.00A LB:00.00A LC:00.00A
Host:host3 LA:00.75A LB:01.13A LC:09.63A
Elapsed Time: 0.634697914124
# python.py | grep Host | sort | uniq -c
10 Host:host1 LA:00.00A LB:00.00A LC:00.38A
10 Host:host2 LA:00.00A LB:00.00A LC:00.00A
5 Host:host3 LA:00.75A LB:01.13A LC:09.50A
5 Host:host3 LA:00.75A LB:01.13A LC:09.63A
最佳答案
仔细检查你的缩进。
每次初始化一个新的工作线程时,您都会将整个主机列表排入队列。此外,您可以通过 join()
ing 队列来序列化这些线程:
for i in xrange(10):
t = ThreadURL(q)
...
for item in host_list: # oops
q.put(item)
q.join() # oops
关于Python 队列问题 - queue.get 不删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583584/
我试图弄清楚以下模块正在做什么。 import Queue import multiprocessing import threading class BufferedReadQueue(Queue.
如果我使用 Queue.Queue,那么我的 read() 函数不起作用,为什么?但是,如果我使用 multiprocessing.Queue,它运行良好: from multiprocessing
我正在寻找比我在文档中找到的更多关于 Python 队列实现的见解。 根据我的理解,如果我在这方面有误,请原谅我的无知: queue.Queue():通过内存中的基本数组实现,因此不能在多个进程之间共
当我使用多处理模块(Windows 上的 Python 2.7)中的队列代替 Queue.Queue 时,我的程序没有完全关闭。 最终,我想使用 multiprocessing.Process 处理
阅读了大量的 JavaScript 事件循环教程,我看到了不同的术语来标识队列存储消息,当调用堆栈为空时,事件循环准备好获取消息: 队列 消息队列 事件队列 我找不到规范的术语来识别它。 甚至 MDN
我收到错误消息“类型队列不接受参数”。当我将更改队列行替换为 PriorityQueue 时,此错误消失并且编译正常。有什么区别以及如何将其更改为编译队列和常规队列? import java.util
如何将项目返回到 queue.Queue?如果任务失败,这在线程或多处理中很有用,这样任务就不会丢失。 docs for queue.Queue.get()说函数可以“从队列中删除并返回一个项目”,但
如何在多个 queue.Queue 上进行“选择”同时? Golang 有 desired feature及其 channel : select { case i1 = 声明。 线程:queue 模
http://docs.python.org/2/library/queue.html#Queue.Queue.put 这似乎是一个幼稚的问题,但我在文档和谷歌搜索中都没有找到答案,那么这些方法是线程
这可能是个愚蠢的问题,但我对与 .dequeue() 和 $.queue() 一起使用的 .queue() 感到困惑> 或 jquery.queue()。 它们是否相同,如果是,为什么 jquery
我正在尝试创建一个线程化的 tcp 流处理程序类线程和主线程对话,但是 Queue.Queue 也没有做我需要的,服务器从另一个程序接收数据,我只想传递它进入主线程进行处理这里是我到目前为止的代码:
The principal challenge of multi-threaded applications is coordinating threads that share data or ot
在Queue模块的queue类中,有几个方法,分别是qsize、empty 和 full,其文档声称它们“不可靠”。 他们到底有什么不可靠的地方? 我确实注意到 on the Python docs网
我需要一个队列,多个线程可以将内容放入其中,并且多个线程可以从中读取。 Python 至少有两个队列类,Queue.Queue 和 collections.deque,前者似乎在内部使用后者。两者都在
明天我将介绍我选择进程内消息队列实现的基本原理,但我无法阐明我的推理。我的合作设计者提议我们实现一个简单的异步队列,只使用基本的作业列表和互斥锁来控制访问,我建议在嵌入式模式下使用 ActiveMQ。
在 scala 中定义了一个特征: trait Queue[T] Queue 是一种类型吗?或其他东西,例如类型构造函数? 来自 http://artima.com/pins1ed/type-para
我看到 SML/NJ 包含一个队列结构。我不知道如何使用它。如何使用 SML/NJ 提供的附加库? 最佳答案 Queue structure SML '97 未指定,但它存在于 SML/NJ 的顶级环
我是 D3 和 JavaScript 的新手。 我试图理解其中的 queue.js。 我已经完成了 this关联。但是仍然无法清楚地了解 queue.await() 和 queue.awaitAll(
所以我试图在我的 main.cpp 文件中调用一个函数,但我得到“错误:没有匹配函数来调用‘Queue::Queue()。” 队列.h #ifndef QUEUE_H #define QUEUE_H
假设我有一个 10 行的二维 numpy 数组 例如 array([[ 23425. , 521331.40625], [ 23465. , 521246.03125],
我是一名优秀的程序员,十分优秀!