我正在尝试在Eclipse中运行以下命令(使用PyDev)并且我一直收到错误:
q = queue.Queue(maxsize = 0)NameError:未定义全局名称"queue"
我已经检查了文档,看起来它应该如何放置.我在这里错过了什么吗?这是PyDev的工作原理吗?还是遗漏了代码中的内容?谢谢你的帮助.
from queue import *
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
def main():
q = queue.Queue(maxsize=0)
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
main()
Run Code Online (Sandbox Code Playgroud)
使用:Eclipse SDK
版本:3.8.1构建ID:M20120914-1540
和Python 3.3
是否有可以实现零依赖部署的产品(理想情况下是开源,但不是必需的)?我能找到的每个服务总线或队列库都依赖于其中一个队列应用程序(如msmq)或数据库.我想要一个非常轻量级的解决方案,我可以添加对我的应用程序的引用,构建它,并使用尽可能少的配置部署它.
在理想的世界中,队列/服务总线将在IIS上运行,并允许Web和富客户端与之通信.
这种工具非常适合本地开发机器上的大型分布式系统的快速原型设计.
我注意到类似问题的线程:在.NET中限制Queue <T>的大小?
这正是我想要做的,但我不是在使用.net而是使用GNU C++.我没有引用GNU C++中的基类,所以像java super.***()或.net之类的java base.***()将不起作用.我一直试图从队列类继承,但事实证明是徒劳的.
我想做的事:指定队列的大小,并在队列满时自动出队.具体来说:如果队列的最大大小为2,当我按下第3项时,第1项将在推送新项目之前自动弹出.
如何实现这样的队列?
谢谢.
使用我使用的列表
List<int> list = new List<int>();
list.AddRange(otherList);
Run Code Online (Sandbox Code Playgroud)
如何使用Queue?来执行此操作,此Collection没有AddRange方法.
Queue<int> q = new Queue<int>();
q.AddRange(otherList); //does not exists
Run Code Online (Sandbox Code Playgroud) 我试图了解Grand Central Dispatch的概念.我想理解Vandad关于并发编程的书中的这些引用.
GCD的真正用途是将任务分配给多个内核,而不是让您成为程序员,而是担心哪个内核正在执行哪个任务.
和
GCD的核心是调度队列.调度队列是线程池.
最后
您不会直接使用这些线程.您将只使用调度队列,将任务分派给这些队列并要求队列调用您的任务.
我加粗了关键术语.
多个核心与队列相同吗?队列是否包含许多线程?每个线程都执行任务吗?
我们在Windows下的IIS下运行Flask站点,对于进程外任务,我们使用Celery.Celery在Windows下给了我们一些问题,但是现在我们很满意运行版本3.1.12,使用RabbitMQ/AMQP作为后端,它可以在Windows下运行.
新版Celery(4)已经放弃了对Windows的支持,所以我正在寻找一种可行的替代方案.
RQ似乎是一个非常好的任务队列,但它也不支持Windows(页面底部)
我已经看到了一些看起来不太受欢迎的任务队列,例如:
但目前还不清楚这些是否支持Windows和Flask.我想知道是否有人有经验在Windows下运行Python任务队列的经验.也许我提到的那个之一,或者另类.
我们不能选择运行Linux机器,因为我们没有管理Linux的经验,而且我们有许多需要Windows运行的遗留内容.
我想弄清楚使用队列的最佳方法是什么.我有一个返回DataTable的进程.反过来,每个DataTable都与之前的DataTable合并.有一个问题,在最终的BulkCopy(OutOfMemory)之前要保留的记录太多.
所以,我已经确定我应该立即处理每个传入的DataTable.考虑一下ConcurrentQueue<T>......但我不知道该WriteQueuedData()方法如何知道将一个表出列并将其写入数据库.
例如:
public class TableTransporter
{
private ConcurrentQueue<DataTable> tableQueue = new ConcurrentQueue<DataTable>();
public TableTransporter()
{
tableQueue.OnItemQueued += new EventHandler(WriteQueuedData); // no events available
}
public void ExtractData()
{
DataTable table;
// perform data extraction
tableQueue.Enqueue(table);
}
private void WriteQueuedData(object sender, EventArgs e)
{
BulkCopy(e.Table);
}
}
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是,除了我实际上没有订阅任何事件的事实,如果我ExtractData()异步调用这将是我需要的全部内容吗?第二,我是否缺少关于ConcurrentQueue<T>函数的方式以及需要某种形式的触发器与排队对象异步工作的东西?
更新
我刚刚派生出一个ConcurrentQueue<T>具有OnItemQueued事件处理程序的类.然后:
new public void Enqueue (DataTable Table)
{
base.Enqueue(Table);
OnTableQueued(new TableQueuedEventArgs(Table));
}
public void OnTableQueued(TableQueuedEventArgs table)
{
EventHandler<TableQueuedEventArgs> handler = TableQueued; …Run Code Online (Sandbox Code Playgroud) 问:如何在"典型"Torque MPI系统上找到可用的PBS队列?(要求我们的管理员需要24小时以上,系统会随着迁移而变化)
(例如,"Std8"是一个可能的队列)
#PBS -q Std8
Env Redis 2.8.17
我们使用类似于redis文档中描述的模式在RPOPLPUSH下实现了可靠的队列
但是,我们使用BRPOPLPUSH考虑其阻塞性质,并使用LPUSH来确保FIFO顺序.
生产者:使用LPUSH推送项目的多个线程(来自多个服务器).
消费者:使用BRPOPLPUSH处理项目的多个线程(来自多个服务器).
BRPOPLPUSH q processing-q
Run Code Online (Sandbox Code Playgroud)
如记录所示,redis从队列'q'弹出项目,同时在'processing-q'中添加它们.
由于我们的应用程序具有多线程(异步)特性,因此当消费者完成处理时,我们无法控制.
因此,如果我们使用LREM(根据文档)从processing-q中删除已处理的元素,这将只删除处理q的顶部元素.在哪里无法保证,是否已经删除了由相应消费者处理的实际元素.
因此,如果我们不做任何事情,处理-q继续增长(吃掉记忆),这是非常糟糕的恕我直言.
有什么建议或想法吗?
我试图利用队列从Tensorflow中的文件加载数据.
我想在每个时代结束时使用验证数据运行图表,以更好地了解培训的进展情况.
这就是我遇到问题的地方.我似乎无法弄清楚如何在使用队列时在训练数据和验证数据之间进行切换.
我已经将我的代码剥离到一个简单的玩具示例,以便更容易获得帮助.我没有包含加载图像文件的所有代码,执行推理和训练,而是将文件名加载到队列中.
import tensorflow as tf
# DATA
train_items = ["train_file_{}".format(i) for i in range(6)]
valid_items = ["valid_file_{}".format(i) for i in range(3)]
# SETTINGS
batch_size = 3
batches_per_epoch = 2
epochs = 2
# CREATE GRAPH
graph = tf.Graph()
with graph.as_default():
file_list = tf.placeholder(dtype=tf.string, shape=None)
# Create a queue consisting of the strings in `file_list`
q = tf.train.string_input_producer(train_items, shuffle=False, num_epochs=None)
# Create batch of items.
x = q.dequeue_many(batch_size)
# Inference, train op, and accuracy calculation after this point …Run Code Online (Sandbox Code Playgroud) queue ×10
c# ×3
python ×3
c++ ×1
celery ×1
collections ×1
containers ×1
flask ×1
limit ×1
pbs ×1
python-3.x ×1
python-huey ×1
redis ×1
reliability ×1
servicebus ×1
tensorflow ×1
terminology ×1
torque ×1