[英]Using map with queue.put()?
要將列表加載到Python中的隊列中,我發現此代碼段無法正常工作。 沒有項目添加到隊列:
from queue import Queue
my_list = [1,2,3,4,5,6,7,8,9,10]
q = Queue()
# This code doesn't work
map(q.put, my_list)
q.qsize() # Returns zero, which is unexpected
更詳細的解決方案:
for num in my_list:
q.put(num)
print(q.qsize()) # returns 10 as expected
可以正常工作。 我在這里想念什么?
map(q.put, my_list)
僅返回一個迭代器。 除非您進行迭代,否則不會填充您的隊列q
>>> q = Queue()
>>> itr = map(q.put, my_list)
>>> q.qsize()
0
>>> _ = list(map(q.put, my_list))
>>> q.qsize()
10
map
不是這樣工作的:
from queue import Queue
l = [i for i in range(10)]
q = Queue()
x = map(q.put, l)
q.qsize()
# Output: 0
for _ in x:
pass
q.qsize()
# Output: 10
您可以使用ThreadPool
獲得所需的內容:
from queue import Queue
from multiprocessing.pool import ThreadPool
l = [i for i in range(10)]
p = ThreadPool()
q = Queue()
_ = p.imap_unordered(q.put, l)
q.qsize()
# Output: 10
如果您需要其他內置插件:
# list comprehension (essentially what map is equivalent to)
_ = [q.put(i) for i in l]
# the `any` method:
_ = any(q.put(i) for i in l)
我不確定為什么這對您不起作用。 也許您的python版本是2.7.6
from queue import Queue
my_list = [1,2,3,4,5,6,7,8,9,10]
q = Queue()
# This code doesn't work
map(q.put, my_list)
q.qsize()
print q.qsize() # 10
while not q.empty():
print q.get()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.