我有一个 python 脚本,在我的文件顶部:
result_queue = Queue.Queue()
key_list = *a large list of small items* #(actually from bucket.list() via boto)
我了解到队列是过程安全的数据结构。我有一个方法:
def enqueue_tasks(keys):
for key in keys:
try:
result = perform_scan.delay(key)
result_queue.put(result)
except:
print "failed"
这里的perform_scan.delay()
函数实际上调用了一个 celery worker,但我认为不相关(它是一个异步进程调用)。
我也有:
def grouper(iterable, n, fillvalue=None):
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
最后我有一个main()
功能:
def main():
executor = concurrent.futures.ProcessPoolExecutor(10)
futures = [executor.submit(enqueue_tasks, group) for group in grouper(key_list, 40)]
concurrent.futures.wait(futures)
print len(result_queue)
print 语句的结果是 0。但是,如果我包含一个大小为result_queue
in的 print 语句enqueue_tasks
,当程序运行时,我可以看到大小正在增加,并且正在将内容添加到队列中。
对正在发生的事情的想法?