如果这不是正确的说法,我道歉,但我不知道从哪里开始。如果这个问题需要改写,我肯定会这样做。
我刚刚编写了一段从各种服务器收集数据的代码。它目前正在运行,我希望能够开始编写可以访问正在收集的数据的其他代码片段。显然,我可以通过将数据转储到文件中来完成此操作,并让我的数据分析代码读取存储在磁盘上的文件。但是,对于某些形式的分析,我希望能够更接近实时数据。有没有办法让我从我的数据集代码中访问该类而不显式实例化它?我的意思是,我可以设置一段代码来启动数据收集,然后编写其他能够访问数据收集类的代码而无需停止并重新启动数据收集代码吗?
我希望这是有道理的。我意识到数据可以存储到磁盘,我可以做一些事情,比如让我的数据分析代码搜索目录进行更改。但是,我很想知道是否可以这样做。
答案 0 :(得分:4)
这似乎是一个Producer Consumer问题。
制作人的工作是生成一段数据,将其放入 缓冲并重新开始。与此同时,消费者正在消费 数据(即,从缓冲区中删除)一次一件
这里的问题是"同时"。因此,生产者和消费者需要 同时运行。因此我们需要生产者和生产者的单独线程 消费者。
我从上面的链接中获取代码,您应该通过它获取更多详细信息。
from threading import Thread
import time
import random
from Queue import Queue
queue = Queue(10)
class ProducerThread(Thread):
def run(self):
nums = range(5)
global queue
while True:
num = random.choice(nums)
queue.put(num)
print "Produced", num
time.sleep(random.random())
class ConsumerThread(Thread):
def run(self):
global queue
while True:
num = queue.get()
queue.task_done()
print "Consumed", num
time.sleep(random.random())
ProducerThread().start()
ConsumerThread().start()
说明:
我们正在使用Queue实例(以下称队列).Queue有一个Condition 而那个条件已经锁定了。你不需要打扰 如果您使用队列,则为条件和锁定。
生产者使用队列中的put来在队列中插入数据。
put()具有在插入数据之前获取锁的逻辑 队列中。
此外,put()会检查队列是否已满。如果是,则调用
内部等待(),生产者开始等待。
消费者使用get。
get()在从队列中删除数据之前获取锁。
get()检查队列是否为空。如果是,它会让消费者进入 等待状态。